2010-07-12 5 views

Répondre

7

Chargement paresseux et différé sont assez synonymes (AFAIK, s'il vous plaît corrigez-moi si je me trompe). La grande différence est entre Eager et Lazy. Désireuse va se passer avant, paresseux ne se produit que « au besoin » et l'exécution se produira à la DB nous allons prendre Niveau double une simple déclaration REJOIGNEZ comme un exemple

var people = (from p in people SELECT p).ToList(); 
var jobs = (from j in jobs SELECT j).ToList(); 

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList() 

Ceci est un exemple de chargement avide. Nous obtenons TOUTES les personnes, TOUS les travaux, et nous faisons la jointure dans la mémoire. Pas très intelligent (habituellement). Voici à quoi ressemble le style Lazy.

var people = (from p in people SELECT p); 
var jobs = (from j in jobs SELECT j); 

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList() 

Ce que cela fait est la création d'un IQueryable pour les personnes et l'emploi (IQueryable est paresseux), et la jointure se passe dans le DB. Cela économise l'activité réseau, et est généralement plus rapide, puisque la base de données est optimisée pour faire des jointures et autres. Sauf si nous disons explicitement "J'ai besoin de ces données!" (en le ToListing, en l'itérant, etc.) c'est paresseux. Il y a quelques bizarreries mais cela devrait être une amorce décente.

+0

NOTE- la syntaxe peut ne pas être 100%, juste en sortant du brassard. –

+0

Par exemple, une fois que vous faites une ToList, le chargement est très rapide, comme c'est le cas avec un DB pour obtenir les données. Donc, il semble être plus d'un style de programmation. Toutefois, avec EF, il existe un moyen de définir LazyLoading comme vrai ou faux dans les options de contexte. Comment cela s'intègre-t-il? – DotnetDude

+0

EF4 avec LazyLoading off vous obligera à dire People.Include ("Jobs") pour ramener les enregistrements d'emplois (en supposant que les travaux sont FK'd à People). Avec LazyLoading activé, ces données seront renvoyées si nécessaire. C'EST À DIRE. quand vous dites People.Jobs.ToList(); –

3

Chargement paresseux/différé: chargement paresseux et chargement différé sont la même chose. La relation est chargée lors de l'accès pour la première fois. L'idée est que si les données ne sont pas nécessaires, elles ne doivent pas être chargées.

Chargement rapide: La relation est récupérée avec l'objet parent. Cela peut être plus efficace dans le chargement des données mais chargera les données indépendamment des données utilisées/non utilisées.

0

Lorsque des objets sont renvoyés par une requête, les objets associés ne sont pas chargés en même temps. Au lieu de cela, ils sont chargés automatiquement lors de l'accès à la propriété de navigation. Également connu sous le nom de "chargement paresseux",

Questions connexes