2011-11-04 4 views
3

J'ai plusieurs tables, y compris la «combinaison» dans la relation plusieurs-à-plusieurs. Je veux faire maintenant l'opération d'insertion.DeferredLoadingEnabled - comment ça marche?

J'ai entendu parler de DeferredLoadingEnabled dans linq2sql et je sais qu'il est connecté à ce sujet, mais je ne sais pas comment cela fonctionne?

Par exemple

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

Quelqu'un pourrait-il présenter à cet exemple simple ou fournir un lien agréable?

Répondre

8

Cela n'a absolument rien à voir avec l'insertion. Le chargement différé signifie que Linq-2-sql ira uniquement dans la base de données dès que vous utiliserez les tables liées.

Dans votre exemple, si vous chargez un [Code client], le nom de la ville ne sera pas chargé jusqu'à ce que vous l'utilisiez réellement.

Donc, si vous faites:

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

L'entité CityTable ne sera pas chargé jusqu'à ce que vous faites quelque chose comme:

string x = thisOne.CityTable.Cityname 

Seulement à ce moment-là, le CityTable est chargé à partir du db.

Cela peut être très bien si vous ne occassionaly besoin de la ville, mais il peut conduire à N + 1 requêtes dès que vous en boucle à tous vos CityTables

Il y a beaucoup de liens autour. E.g .: http://msdn.microsoft.com/en-us/library/bb399393.aspx

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