【问题标题】:Can we have 2 DbContexts with the same underlying domain model?我们可以有 2 个具有相同底层域模型的 DbContext 吗?
【发布时间】:2014-02-03 19:30:40
【问题描述】:

我想要一个为写入启用延迟加载的 dbcontext,另一个为读取禁用延迟加载的 dbcontext。两者都应该在同一个模型上工作。我想在使用延迟加载设置将 2 个 dbcontexts 构建到服务类中后注入它们,并在适当的情况下使用它们中的每一个。

这甚至可能吗?

我想我想避免在服务方法中将延迟加载设置为 false。

【问题讨论】:

    标签: entity-framework dbcontext


    【解决方案1】:

    你可以,但这可能是个坏主意。您将无法将从一个上下文中检索到的实体与另一个上下文一起使用(无论如何都不能直接使用)。要写入使用“读取”上下文检索到的实体,您必须使用“写入”上下文再次读取它才能修改它。

    相反,您可以在使用上下文之前根据需要简单地启用或禁用延迟加载。

    DbContext.Configuration.LazyLoadingEnabled = false; //or true
    

    您可以通过简单地定义一个自定义构造函数来设置 LazyLoading 属性来简化它。

    public MyDbContext(bool LazyLoad)
            : base(nameOrConnectionString: "MyDbContext") {
                this.Configuration.LazyLoadingEnabled = LazyLoad;
    }
    

    如果你真的需要,可以子类化你的 DbContext 并在构造函数中设置 LazyLoading,但这似乎是个坏主意。

    【讨论】:

    • 使用automapper时,如果目标实体有children,lazyloading会自动导致额外的sql。如果您获得大量父实体列表,这可能会很危险。所以,对于服务读取,我认为禁用延迟加载是个好主意。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2018-12-22
    • 2017-02-27
    • 2018-10-21
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多