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。

如何在不触发导航属性惰性加载的情况下将树添加到花园中,并且不传输不必要的数据?

EF Lazy-Loading:将项目添加到导航属性中而不加载它

如果您首先使用DB,那么您唯一的选择是关闭整个上下文的延迟加载。ctx.Configuration.LazyLoadingEnabled = false

如果使用代码第一,然后确保标记你的ICollection<Tree> Trees不是virtual,然后禁用延迟加载只是为这个集合。