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

时间:2016-10-23 23:36:42

标签: c# entity-framework linq-to-sql

假设以下数据模型:

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。

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

1 个答案:

答案 0 :(得分:1)

如果您首先使用数据库,那么您只能选择关闭整个上下文的延迟加载。 ctx.Configuration.LazyLoadingEnabled = false

如果使用Code First,请确保标记ICollection<Tree> Trees不是virtual,然后仅为此集合禁用延迟加载。