2010-03-12 67 views
0

重複的How can I stop an auto-generated Linq to SQL class from loading ALL data? 在那裏發表回答!如何阻止自動生成的Linq to SQL類加載所有數據?

我有一個ASP.NET MVC項目,很像NerdDinner教程示例。 (我使用MVC 2,但爲了創建它,遵循NerdDinner教程)。

根據本教程的part 3中的說明,我通過創建一個「Linq to SQL Classes」(.dbml)表面並將我的數據庫表放到它上面來創建了我的數據庫的Linq-to-SQL模型。設計者根據我的數據庫表自動添加生成的類之間的關係。假設我的類是根據NerdDinner示例的,所以我有Dinner和RSVP表,每個Dinner記錄都與許多RSVP記錄相關聯 - 因此在生成的類中,Dinner對象具有RSVPs屬性,它是一個RSVP對象列表。

我的問題是這樣的:它出現(和我會很樂意被證明是錯誤的這一點),一旦我 訪問Dinner對象,它加載所有相應的RSVP對象,即使我請勿使用RSVPs會員。

第一個問題:這真的是生成的類的默認行爲嗎?

在我的特殊情況下,對象圖包含更多的表(它的數量級更多的記錄),所以這是災難性的行爲 - 當我想要做的就是顯示數據時,我會加載大量數據單親記錄的細節。

第二個問題:是否有通過設計器UI公開的任何屬性,讓我修改此行爲? (我找不到)。

第三個問題:我已經看到了如何通過使用帶有DataContext的相關的DataShape對象控制在DataContext相關記錄加載的描述。那是我要做的事情嗎?如果有的話,是否有像NerdDinner這樣的教程不僅會展示如何去做,還會爲正常使用提供一個「模式」?

回答

1

給定Dinner類,它不會自動加載外鍵關係屬性。你必須設置數據加載選項對於工作,如:

var o = new DataLoadOptions(); 
o.LoadWith<Dinner>(i => i.RSVPs); 

但是,任何時候你訪問回函,它會自動默認加載這些(如果你導航到智能感知屬性太,僅供參考) 。

HTH。