分配关联时停止EF加载实体

时间:2010-09-07 18:51:09

标签: entity-framework

使用Entity framework v4和POCO实体生成器T4模板。

我遇到的问题是,当我分配关联实体时,Fixup方法正在加载数百个实体(参见下面的第4行)。

Dim context = New SomeEntities
Dim list = context.Lists.FirstOrDefault(Function(l) l.ListId = 2)
Dim queryDetail = context.CreateObject(Of QueryDetail)()
queryDetail.CriteriaColumnType = context.CriteriaColumnTypes.FirstOrDefault(Function(cct) cct.CriteriaColumnTypeId = 145)

正在分配的CriteriaColumnType实体具有QueryDetail个对象的集合,并且在进行赋值时,CriteriaColumnType实体上的FixUp方法延迟加载所有关联QueryDetails

如何在不加载所有CriteriaColumnType QueryDetail条记录的情况下创建FK关联并将CriteriaColumnType's实体附加到QueryDetail实体?

2 个答案:

答案 0 :(得分:1)

你需要延迟加载吗?你可以把它关掉:

context.ContextOptions.LazyLoadingEnabled = false

答案 1 :(得分:1)

我也遇到了这个问题。过去花费几毫秒的操作开始需要3-4秒才能运行,因为我添加了一个指向大表的导航属性。

我通过删除T4模板中的所有修正代码解决了这个问题 - 我们的项目无论如何都不需要这个功能。我从这一行删除了所有内容:

region.Begin("Association Fixup");

到下一个region.End()调用。我还从属性设置器,CollectionChanged处理程序的注册和_settingFK标志中删除了对fixup方法的所有调用。


有关修复代码存在的原因的更多信息,请参阅此问题:Why is "Fixup" needed for Persistence Ignorant POCO's in EF 4?。它试图确保如果您更改双向关联的一端,另一端也会更新。因此,例如,如果您创建新的BlogPost并将其User属性设置为用户,则fixup逻辑将自动将帖子添加到用户的Posts集合中。

marc_s通过链接到POCO Template Code Generation Options回答了另一个问题。从T4模板中删除修正代码会将模板从#2(带有修正的基本POCO)更改为#1(没有修复的基本POCO)。