Entity Framework 通过 Id 问题设置导航 属性
Entity Framework Setting Navigation Property by Id Issue
我有两个 classes:Owner 和 Dog。在 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();
}
我有两个 classes:Owner 和 Dog。在 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();
}