如何为dbContext的每个实例禁用延迟加载?

时间:2013-05-28 09:40:07

标签: c# entity-framework-4 lazy-loading

我创建了一个edmx,在designer.cs文件中我有3个构造函数。在每个构造函数中,我添加了以下行:

this.Configuration.LazyLoadingEnabled = false;

但是当我创建一个新的DBContext时,启用了延迟加载,因为当我创建一个新的DBContext时,没有使用任何这个构造函数。

使用哪些构造函数创建新的DBContext?

编辑:我没有先使用代码。我从SQL Server数据库创建了edmc。

感谢。

3 个答案:

答案 0 :(得分:3)

您可以转到EDMX文件,属性,还有一个属性Lazy Loading。只是把它弄错了。

此致

<强> ============== EDIT ===============

你不拥有这个吗? enter image description here

==新编辑== enter image description here

答案 1 :(得分:1)

我认为EDMX设计时画布属性上有一个属性可以禁用延迟加载。 edmx文件在ConceptualModel和EntityContainer定义中具有延迟加载的属性,您可以将延迟加载设置为false:

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

参考:Disable lazy loading by default in Entity Framework 4

答案 2 :(得分:1)

edmx设计属性上的属性称为LazyLoadingEnabled - 默认为true。

这在T4模板(MyModel.Context.tt)中使用如下:

public <#=Code.Escape(container)#>()
    : base("name=<#=container.Name#>")
{
<#
    WriteLazyLoadingEnabled(container);
#>
}

如果禁用该属性,将写出以下内容:

this.Configuration.LazyLoadingEnabled = false;

如果FWR属性在EDMX设计器中不可见,则可以删除条件代码生成,并对其进行硬编码:

public <#=Code.Escape(container)#>()
    : base("name=<#=container.Name#>")
{
    this.Configuration.LazyLoadingEnabled = false;
    // more setup here, e.g. this.Configuration.ProxyCreationEnabled = false;    
}