Я использую Entity Framework и имею модель, к которой применяются листинги контроля доступа. У меня есть отношения «один ко многим» между моей моделью и моделью ACL.
В большинстве случаев, когда мне нужно запросить мою модель, мне нужно только вернуть модели с соответствующим ACL.
Вот пример:
var myUnits = _context.Units
.Include(unit => unit.AccessControlRules)
.Where(unit => unit.AccessControlRules.FirstOrDefault(acl => acl.UserId == 15) != null);
Это работает правильно каждый раз. Он вернет только те единицы, которые имеют acl для пользователя с идентификатором 15.
Однако, когда я извлекаю это в следующую форму, он выбрасывает значение не может быть пустым исключением, потому что unit.AccessControlRules имеет значение null.
var myUnits = _context.Units
.Include(unit => unit.AccessControlRules)
.Where(unit => permissionCheck(unit));
private bool permissionCheck(Unit unit)
{
return unit.AccessControlRules.FirstOrDefault(acl => acl.UserId == 15) != null;
}
Это точно такой же код, тогда как вторая (нерабочая) версия unit.AccessControlRules == null
.
Может ли кто-нибудь объяснить это поведение?