在实体框架中(特别是EF 3.5,但如果在EF 4中存在,那么我有理由进行升级),是否可以仅惰性加载集合的一部分? 我可能也以错误的方式处理了这个问题,所以我愿意听取建议。我的表/实体类看起来类似于这样:
问题在于这会加载整个集合。虽然这是一个小集合,所以最坏的情况是我可以将其全部加载,然后删除除我需要的之外的所有内容,但这远非理想。而且我不确定是否可能在不触发修改集合事件的情况下完成此操作,因为它们本应该不在其中。
Person PersonMeal Meal
------ 1---* ---------- *---1 -----
ID ID ID
... PersonID ...
MealID
Value
...
我有一个通过存储过程使用Entity Framework检索到的Person
对象列表。我有一个视图,一次只显示一个Meal
,因此我只想要与该餐相关的信息。目前我的代码看起来像这样:
Function GetPersons() As List(Of Person)
Dim personList = context.StoredProcedureCall(param1, param2, param3).ToList()
personList.ForEach(Function(x) LazyLoadProperties(x))
Return personList
End Function
' Work around function because VB lambdas don't take Sub's
Function LazyLoadProperties(ByVal person As Person) As Object
If (Not person.PersonMeal.IsLoaded) Then
person.PersonMeal.Load()
End If
Return Nothing
End Function
问题在于这会加载整个集合。虽然这是一个小集合,所以最坏的情况是我可以将其全部加载,然后删除除我需要的之外的所有内容,但这远非理想。而且我不确定是否可能在不触发修改集合事件的情况下完成此操作,因为它们本应该不在其中。
Person
是否与PersonMeal
具有多对多关系,而PersonMeal
与Meal
也具有多对多关系?或者Person
与Meal
之间是多对多关系,而PersonMeal
是连接表?如果是这样,就不应该为PersonMeal
生成实体。我还注意到了一个Value
字段。您能否稍微澄清一下您的数据结构?您的EDM截图以及数据库结构也可能会有所帮助。 - YakimychPersonEntity
表,但不生成实体。Person
实体应该有一个Meals
集合,而Meal
实体应该有一个People
集合。您是从数据库生成模型还是在设计器中自己创建的?Value
属性是什么(这可能是EF生成PersonMeal
实体的原因)? - YakimychPersonMeals
而不是PersonMeal
,因为它是一个集合。关于你的问题:"我有一个视图,每次只显示一餐,所以我只想要与那餐相关的信息
"。你如何确定要加载和显示哪一餐? - Yakimych