我有两个课程:所有者和狗。在 Dog 类中,有一个定义如下的导航属性:
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();
}
这一切都有效,但是当我稍后使用相同的db上下文并查找相同的dog实体时,它的Owner属性为null。 (当我使用另一个db上下文时,它不是null。)
但是,如果我取消注释SetOwnerOfFirstDog方法中的第一行,将正确设置Owner属性。但当然这是对数据库的额外查询,我想避免它。
所以我的问题: 在通过Id设置Dog的所有者后,当我查找时,如何确保正确填写所有者属性。
我正在使用延迟加载。
答案 0 :(得分:1)
您可以使用Include
加载相关实体
public void SetOwnerOfFirstDog(int ownerId)
{
var dog = context.Dogs.Include(x => x.Owner).First();
dog.OwnerId = ownerId;
context.SaveChanges();
}