使用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
实体?
答案 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)。