DeferredLoadingEnabled - 它是如何工作的?

时间:2011-11-04 15:32:52

标签: c# linq-to-sql many-to-many deferred-loading

我有几个表,包括多对多关系中的'组合'。我想现在进行插入操作。

我在linq2sql中听说过DeferredLoadingEnabled,我知道它与这个主题有关,但我不太清楚它是如何工作的?

例如

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

有人可以在这个简单的例子中展示它还是提供一些不错的链接?

1 个答案:

答案 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