Entity Framework - Не получается загрузить связанные объекты - PullRequest
0 голосов
/ 20 сентября 2018

Я немного новичок в EF, и я использую ядро ​​.net, и я просто не могу загрузить связанные сущности сущности, если я не сделаю полноценный "from..in..join"оператор linq.

У моих сущностей есть первичные ключи Guid, и я использую SQL Server в качестве БД.

Давайте рассмотрим одну сущность, с которой у меня возникли проблемы.

[Table("User")]
public class User : AuditableEntity
{
  public Group CurrentlySelectedGroup { get; set; }
}

[Table("Group")]
public class Group : AuditableEntity
{      
  public string Name { get; set; }
}

Пользователь может выбрать одну группу в качестве своей «выбранной» группы.Я запустил оператор переноса и убедился, что он создал именно то, что мне нужно, в БД - совершенно новый столбец с именем CurrentSelectedGroupId, который был FK для столбца PK таблицы Group.

Так что это выглядит великолепно.

Затем я запустил некоторый код, который добавил действительный Guid для допустимой группы в таблицу.

Теперь, когда я выполняю эту строку кода:

 var user = _dbContext.Users.Where(u => u.Id == userId).FirstOrDefault();

Он отлично возвращает моего пользователя,но все связанные объекты являются нулевыми.Я даже пробовал такие вещи, как .Include (), в том числе «виртуальный», но не повезло.

Есть идеи, что я делаю не так?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Ленивая загрузка не включена, эта функция была включена в EF Core 2.1.В вашем случае Явная загрузка происходит, поэтому вам нужно явно загрузить связанные объекты.Поэтому, если вы используете EF Core 2.1, вы можете просто включить Lazy Loading и использовать связанные сущности, не добавляя их явно.

0 голосов
/ 20 сентября 2018

После долгих проб и ошибок кажется, что работает следующее:

  var user = _dbContext.Users.Single(u => u.Id == userId);
  _dbContext.Entry(user).Reference(u => u.CurrentlySelectedGroup).Load();

Есть идеи, почему это будет работать, но не что-нибудь еще?

Спасибо

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