У меня есть два класса: Владелец и Собака. В классе собак есть свойство навигации определяется следующим образом:Entity Framework Настройка навигации по идентификатору Issue
public class Dog {
//Other properties
public int OwnerId { get; set; }
[ForeignKey("OwnerId")]
public virtual Owner Owner{ get; set; }
}
У меня также есть следующее (пример) метод
public void SetOwnerOfFirstDog(int ownerId)
{
//var owner = context.Owners.First(e => e.Id == ownerId);
var dog = context.Dogs.First();
dog.OwnerId = ownerId;
context.SaveChanges();
}
Это все работает, но когда я позже использовать же дб контекст и найдите ту же собаку, что и свойство владельца null. (Когда я использую другой контекст db, он не является нулевым.)
Однако, если я раскомментирую первую строку в методе SetOwnerOfFirstDog, свойство Owner будет правильно установлено. Но, конечно, это дополнительный запрос к базе данных, и я бы хотел его избежать.
Так что мой вопрос: Как я могу убедиться, что свойство Владелец правильно заполнено, когда я смотрю его после того, как я установил владельца Собаки по идентификатору.
Я использую ленивую загрузку.
Это работает. Я думал, что Include не нужен с ленивой загрузкой. Если вы не возражаете, можете ли вы сказать мне, как включить Владельца, если я создаю новый объект Dog в этом методе вместо того, чтобы находить существующий? – Jens
Я не думаю, что есть хороший способ сделать это, не найдя связанного объекта. Вероятно, вы можете попытаться сделать магию с помощью диспетчера состояний объекта, чтобы вручную создать прикрепленный объект без изменений, поэтому вам не нужно будет требовать db, но я не пробовал такой метод –