在 Entity Framework 4 中默认禁用延迟加载 [英] Disable lazy loading by default in Entity Framework 4

查看:28
本文介绍了在 Entity Framework 4 中默认禁用延迟加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

似乎在 EF4 中默认启用了延迟加载.至少,在我的项目中,我可以看到

dataContext.ContextOptions.LazyLoadingEnabled

默认为真.我不想延迟加载,也不想写:

dataContext.ContextOptions.LazyLoadingEnabled = false;

每次我得到一个新的上下文.那么有没有办法在整个项目中默认关闭它?

解决方案

以下答案是指Database-FirstModel-First 工作流(仅有的两个工作流提出问题时可用于实体框架(版本 <= 4.0).如果您使用的是 Code-First 工作流程(自 EF 版本 >= 4.1 起可用)继续 ssmith 的

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

It seems that lazy loading is enabled by default in EF4. At least, in my project, I can see that the value of

dataContext.ContextOptions.LazyLoadingEnabled

is true by default. I don't want lazy loading and I don't want to have to write:

dataContext.ContextOptions.LazyLoadingEnabled = false;

each time I get a new context. So is there a way to turn it off by default, say, across the whole project?

解决方案

The following answer refers to Database-First or Model-First workflow (the only two workflows that were available with Entity Framework (version <= 4.0) when the question was asked). If you are using Code-First workflow (which is available since EF version >= 4.1) proceed to ssmith's answer to this question for a correct solution.


The edmx file has in the <ConceptualModel> and <EntityContainer> definition an attribute for lazy loading where you can set lazy loading generally to false:

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

This creates the following setting in the ObjectContext constructor:

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

My example is not meant that way that the generated ObjectContext (or DbContext in newer EF versions) should be edited manually (which would be overwritten with every model update from the database, as ctorx pointed out) but that the EntityContainer element in the edmx:ConceptualModels section of the EDMX file should be edited by adding the annotation:LazyLoadingEnabled="false" attribute - either manually in an XML editor or on the properties page of the designer surface where this option is available as well, Right-Click EDMX then Properties.

This modification of the EDMX file will automatically generate the context class with the disabled lazy loading option in the constructor like shown above. The EDMX file modification itself does not get overwritten when the model is updated from the database.

这篇关于在 Entity Framework 4 中默认禁用延迟加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆