Entity Framework 通过 Id 问题设置导航 属性

Entity Framework Setting Navigation Property by Id Issue

我有两个 classes:OwnerDog。在 Dog class 中有一个 Navigation 属性 定义如下:

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();
} 

这一切都有效,但是当我稍后使用 相同的数据库上下文 并查找相同的狗实体时,它的所有者 属性 为空。 (当我使用另一个数据库上下文时,它不是空的。)

但是,如果我取消注释 SetOwnerOfFirstDog 方法中的第一行,所有者 属性 将被正确设置。但当然这是对数据库的额外查询,我想避免它。

所以我的问题是: 我通过Id设置了Dog's Owner后,在查找时如何确保Owner 属性填写正确。

我正在使用延迟加载。

您可以使用Include加载相关实体

public void SetOwnerOfFirstDog(int ownerId)
{       
   var dog = context.Dogs.Include(x => x.Owner).First();
   dog.OwnerId = ownerId;
   context.SaveChanges();
}