Не работает Загрузка связанных данных, когда я фильтрую "Включить" сущности - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующие модели

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public List<PersonRole> PersonRoles { get; set; }

}

public class RoleInDuty
{
    public int roleInDutyId { get; set; }
    public string Name { get; set; }
    public int typeOfDutyId { get; set; }
    public TypeOfDuty typeOfDuty { get; set; }
    public List<PersonRole> PersonRoles { get; set; }

}
public class PersonRole
{
    public int PersonId { get; set; }
    public Person Person { get; set; }
    public int RoleInDutyId { get; set; }
    public RoleInDuty RoleInDuty { get; set; }
}

Я загружаю всех людей с их ролями в соответствии с введенным typeOfDutyId:

var temp = _context.Persons.Select(s => new
  {
    Person = s,
    PersonRoles= s.PersonRoles
      .Where(p => p.RoleInDuty.typeOfDutyId == this.typeOfDuty.typeOfDutyId)
      .ToList()
  }).ToList();

Но мне тоже нужна загрузка RoleInDuty.Я пытаюсь следующий код:

var temp = _context.Persons.
  .Include(p=>p.PersonRoles)
    .ThenInclude(b=>b.RoleInDuty)
  .Select(s => new
  {
    Person = s,
    PersonRoles= s.PersonRoles
      .Where(p => p.RoleInDuty.typeOfDutyId == this.typeOfDuty.typeOfDutyId)
      .ToList()
  }).ToList();

Но это не работает, VS выбросить ошибку

InvalidOperationException: переменная 'ct' типа 'System.Threading.CancellationToken' ссылкаиз области видимости '', но она не определена

1 Ответ

0 голосов
/ 29 января 2019

Если поведение такое же, как в EFCore, Include (& ThenInclude) игнорируется, если вы выбираете только некоторую часть сущности (поскольку вы используете анонимный тип: new { ... }).

Возможно, выможет попробовать:

var temp = _context.Persons.
  .Include(p=>p.PersonRoles)
    .ThenInclude(b=>b.RoleInDuty)
  .ToList();

var result = temp.Select(s => new
  {
    Person = s,
    PersonRoles= s.PersonRoles
      .Where(p => p.RoleInDuty.typeOfDutyId == this.typeOfDuty.typeOfDutyId)
      .ToList()
  }).ToList()

Это имеет эффект для загрузки всех сущностей и зависимостей, а затем сопоставить их с анонимным типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...