EF Lazy-Loading:将项目添加到导航属性中而不加载它
本文关键字:属性 加载 导航 Lazy-Loading 项目 添加 EF | 更新日期: 2023-09-27 18:14:26
假设以下数据模型:
class Garden
{
int ID;
ICollection<Tree> Trees;
string Address;
}
class Tree
{
public int ID;
public float Size;
}
让我们种一些树:
var gardens = dbContext.Gardens.Take(10).ToList();
foreach (var g in gardens)
g.Trees.Add(new Tree());
但是现在,由于延迟加载,每次引用g.Trees
都会触发一个数据库查询。我可以在获取花园时执行.Include(garden => garden.Trees)
,但这样我就转移了所有现有的树木。
我可以在Tree中创建一个GardenID列,然后将Tree添加到DbContext中,而不需要修改导航属性。但是现在我需要传递DbContext。
如何在不触发导航属性惰性加载的情况下将树添加到花园中,并且不传输不必要的数据?
如果您首先使用DB,那么您唯一的选择是关闭整个上下文的延迟加载。ctx.Configuration.LazyLoadingEnabled = false
如果使用代码第一,然后确保标记你的ICollection<Tree> Trees
不是virtual
,然后禁用延迟加载只是为这个集合。