在實體框架(特別是EF 3.5,但如果它存在於EF 4中,它給了我一個升級的理由)是否可以延遲加載集合的一部分?我也可能接近這個錯誤,所以我願意接受建議。我的表/實體類似於此:懶惰加載實體框架EntityCollection與條件
Person PersonMeal Meal
------ 1---* ---------- *---1 -----
ID ID ID
... PersonID ...
MealID
Value
...
我已經通過實體框架通過存儲過程被檢索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」生成實體。不過,我也注意到了一個「價值」字段。你能否澄清你的數據結構? EDM的屏幕截圖可能會有所幫助,以及您的數據庫結構。 – Yakimych 2010-10-15 18:18:35
@ Yakimych你說得對,它是人與餐之間的M2M,PersonMeal是連接表/實體。 – 2010-10-15 18:39:11
@ Agent_9191 - 好的,在這種情況下,應該只有一個PersonEntity表,但沒有生成實體。 'Person'實體應該有'Meals'集合,'Meal'實體應該有'People'集合。您是從數據庫生成模型還是在設計器中自己創建模型?什麼是Value屬性(這可能是EF生成PersonMeal實體的原因)? – Yakimych 2010-10-15 19:47:21