我有几个表,包括多对多关系中的'组合'。我想现在进行插入操作。
我在linq2sql中听说过DeferredLoadingEnabled,我知道它与这个主题有关,但我不太清楚它是如何工作的?
例如
[ClientTable]: ClientId, ClientName, Phone, Age
[CityTable]: CityID, CityName, Country
[ClientCityTable]: ClientCityID, ClientID, CityID
有人可以在这个简单的例子中展示它还是提供一些不错的链接?
答案 0 :(得分:8)
它与插入完全无关。
缓冲加载意味着Linq-2-sql只有在您实际使用链接表时才会进入数据库。
在您的示例中,如果您加载[ClientCity],则不会加载Cityname,直到您实际使用它。
所以,如果你这样做:
var thisOne = db.ClientCities.Single(a=>a.id == 1);
在您执行以下操作之前,不会加载CityTable实体:
string x = thisOne.CityTable.Cityname
仅在那时,CityTable从db。
加载如果你只是偶尔需要这个城市,这可能会很棒但是当你循环到你所有的CityTables时它会导致N + 1个查询
周围有很多链接。例如: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