实体框架按Id问题设置导航属性

时间:2015-12-06 16:57:17

标签: c# entity-framework ef-code-first repository-pattern

我有两个课程:所有者。在 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的所有者后,当我查找时,如何确保正确填写所有者属性。

我正在使用延迟加载。

1 个答案:

答案 0 :(得分:1)

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

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