2011-01-14 54 views
0

對於我的項目,我使用SqlCE 3.5,Linq2Sql並使用SqlMetal生成實體類(dbml文件)。Linq-to-Sql,使用實體類和父/子對象

如果我使用實體類的擴展作爲我的業務對象類,我該如何處理子對象?

我可以使用已存在於dbml文件中的現有EntitySet(Of ChildClass)嗎?或者我應該在我的部分類擴展創建一個新的集合屬性,如:

public partial class ParentClass 
{ 
public List<ChildClass> children { get; set; } 
} 

我得到這個模糊的假設的EntitySet(中ChildClass)具有某種類型的直接連接到完整的數據庫表。而且我也許應該將它用作純粹的數據訪問對象,對於業務邏輯,我應該保留這個只能包含表的子集的其他集合對象。

但我不確定我是否完全誤解了這個概念?我真的很想知道這應該如何正確使用..?


EDIT1:

一件事,可能是我的一個性能問題是結合我的對象集合到一個DataGridView時。一些屬性更新頻繁,從股票交換數據饋送,我不知道是否使用EntitySets作爲業務層集合使這慢。雖然我不要求那些更新提交更改。由於所有更新,我仍然無法滾動datagridview。這可能是由於使用EntitySets,或者僅僅是datagridview本身更新頻繁,以至於滾動看起來不可能?

回答

0

如果您使用Designer生成的實體,它們是代理服務器而不是真正的POCO對象,那麼您也可以使用它們的ObjectSet來獲取子集合。它們是IQueryable類型的,所以在觸摸其中一個項目或者使用ToList()或.Where()LinQ擴展之前,EF不會調用數據庫。 無論如何,最佳實踐是使用IList公開它們並使用存儲庫來填充列表。 ObjectSet不僅是一個List,它也是該實體的一種存儲庫。

+0

謝謝!我希望我明白你的意思;使用「使用IList公開它們並使用存儲庫來填充列表」,您的意思是像本示例的第一個代碼部分(http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with -linq-to.html),但返回IList而不是該示例中的IQueryable? – bretddog 2011-01-14 03:12:42

相關問題