2011-11-04 30 views
3

我有幾個表,包括多對多關係中的「組合」。我想現在做插入操作。DeferredLoadingEnabled - 它是如何工作的?

我聽說過linq2sql中的DeferredLoadingEnabled,我知道它與這個主題有關,但我不知道它是如何工作的?

例如

[ClientTable]: ClientId, ClientName, Phone, Age 
[CityTable]: CityID, CityName, Country 
[ClientCityTable]: ClientCityID, ClientID, CityID 

有人能證明它在這個簡單的例子,或提供一些不錯的鏈接?

回答

8

它與插入完全無關。

緩存加載意味着Linq-2-sql將只在您實際使用鏈接表時纔會進入數據庫。

在你的例子中,如果你加載一個[ClientCity],Cityname將不會被加載,直到你真正使用它。

所以,如果你這樣做:

var thisOne = db.ClientCities.Single(a=>a.id == 1); 

的CityTable實體將不會被加載,直到你做這樣的事情:只有在那個時候

string x = thisOne.CityTable.Cityname 

,該CityTable從數據庫加載。

這可能是巨大的,如果你只需要occassionaly城市,但它能夠儘快導致N + 1個查詢,您循環所有的CityTables

有很多周圍的鏈接。例如:http://msdn.microsoft.com/en-us/library/bb399393.aspx

http://www.west-wind.com/weblog/posts/2009/Oct/12/LINQ-to-SQL-Lazy-Loading-and-Prefetching

相關問題