2010-07-15 49 views
0

我正在使用Linq-to-SQL(C#3.5)從我的數據庫(SQL Server 2000)中讀取兩個表,即house和county。 House有一個CountyID列與縣表中的ID列匹配。縣表有ID和CountyName列。數據庫中沒有關聯 - 我將它添加到dbml文件中。 (父類=縣,孩子類=房子)LINQ to SQL - 當我將ObjectTrackingEnabled關閉時丟失關聯

現在我可以查詢房子表,並得到縣名爲house.County.CountyName - 正是我想要的。

這很好,除非我設置EnableObjectTracking爲false。我獲得大約3倍的性能提升,但House中的County兒童對象爲null。

有沒有辦法解決這個問題?

回答

1

當您將EnableObjectTracking設置爲false時,還可以關閉延遲加載子實體,如您所注意到的。 MSDN說...

延期加載需要對象 跟蹤。只有以下三種 模式有效:

ObjectTrackingEnabled = false。 DeferredLoadingEnabled被忽略,​​ 被推斷爲false。此行爲 對應於只讀 DataContext。

ObjectTrackingEnabled = true。 DeferredLoadingEnabled = false。此 情況對應於DataContext ,它允許用戶通過使用LoadWith指令加載對象 圖 但它不啓用延遲 加載。

兩者都設置爲true。這是默認的 。

如果您想保持對象跟蹤禁用,您可以使用LoadWith方法來填充您的子實體。請參閱MSDN瞭解更多關於LoadWith