代码之家  ›  专栏  ›  技术社区  ›  Mike Chamberlain JaredPar

在实体框架4中默认禁用延迟加载

  •  58
  • Mike Chamberlain JaredPar  · 技术社区  · 16 年前

    dataContext.ContextOptions.LazyLoadingEnabled
    

    默认情况下为true。我不想偷懒加载,也不想写:

    dataContext.ContextOptions.LazyLoadingEnabled = false;
    

    每次我有了新的背景。那么,有没有一种方法可以在整个项目中默认关闭它呢?

    5 回复  |  直到 16 年前
        1
  •  69
  •   its4zahoor    7 年前

    以下答案涉及 工作流(实体框架(版本<=4.0)当提出问题时)。如果您正在使用 代码优先 answer


    edmx文件在 <ConceptualModel> <EntityContainer> 定义用于延迟加载的属性,您可以将延迟加载通常设置为false:

    <EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
    

    这将在ObjectContext构造函数中创建以下设置:

    public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
    {
        this.ContextOptions.LazyLoadingEnabled = false;
        OnContextCreated();
    }
    

    ObjectContext (或 DbContext 在较新的EF版本中)应该手动编辑(正如ctorx所指出的那样,数据库中的每个模型更新都会覆盖它),但是 EntityContainer edmx:ConceptualModels 应通过添加 annotation:LazyLoadingEnabled="false" 属性-在XML编辑器中手动执行,或者在设计器图面的属性页上也可以使用此选项,右键单击EDMX,然后单击属性。

    enter image description here

    对EDMX文件的修改将自动生成上下文类,并在构造函数中禁用延迟加载选项,如上图所示。从数据库更新模型时,不会覆盖EDMX文件修改本身。

        2
  •  64
  •   ssmith    10 年前

    我写了一个简单的例子 how the new Lazy Loading features work with EF Code First . 在Code First模型中实现所需的功能只需向DbContext的构造函数中添加一行代码,如下所示:

    public BlogContext()
    {
        this.Configuration.LazyLoadingEnabled = false;
    }
    
        3
  •  24
  •   Slauma    12 年前

    如果你先使用EF4代码,是吗?因此,在上下文的初始化过程中,存在对“OnModelCreated”的重写。

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
         base.Configuration.LazyLoadingEnabled = false;
    }
    

    我的模特现在更讨人喜欢了。懒散的加载是很好的…但不是当你不想要的时候。当你开始有循环引用的时候,这真是太可笑了。

        4
  •  23
  •   SerjG    9 年前

    你也可以从设计师那里做。只需打开.edmx文件,在模型上的任意位置单击鼠标右键,然后选择“属性”。然后设置 LazyLoadingEnabled 错误的。 enter image description here

        5
  •  4
  •   Kind Contributor    13 年前

    virtual 引用/对象属性上的关键字。在一个引用上使用virtual将启用对该特定引用的LazyLoading。