2009-03-30 6 views
2

Jusqu'à présent que je rassemblais, LINQ aux entités encourage le chargement désireux avec Load() ou Include(). Cependant, je me demande où le chargement impatient devrait avoir lieu dans une application multicouche?Désireuse chargement et LINQ to Entities

Est-il correct pour la couche d'accès aux données (une classe référentiel encapsuler l'instance entité) pour avoir une fonction Item GetItem(int id) générique, et dans la couche logique métier ne

Item item = dbRepository.GetItem(itemId); 
if (!item.itemDetails.IsLoaded) 
item.itemDetails.Load() 

Ou devrait la classe référentiel ont différents explicites fonctions qui chargent des relations étrangères différentes, donc retour Article de relations avides-chargées?

Merci beaucoup!

Edit: Exemple - http://www.asp.net/learn/mvc/tutorial-29-cs.aspx

public Contact GetContact(int id) 

Cette fonction retourne un type d'entité Contact. Cependant, dépend des besoins de logique métier, on peut vouloir Load() ou Include() différentes relations extérieures de l'entité Contact. Est-ce que cette exigence signifie que nous devons plus surchargés GetContact() méthodes avec des paramètres indiquant les relations à charger, ou simplement faire la Load() dans la logique métier?

Répondre

0

Pour la plupart, je ne fais pas l'un. Au lieu de cela, j'utilise LINQ pour mapper mes types d'entités aux types de modèles de présentation. Dans ce cas, vous n'avez pas à penser à charger du tout. Par exemple:

var presentationModel = (from entity in Repository.Entities 
         select new PresentationEntity() 
         { 
          Prop = entity.Prop, 
          ChildProp = entity.Child.Prop 
         }).First(); 

Notez que je n'avais pas à penser à charger l'enfant. LINQ aux entités le fait pour vous lorsque vous projetez sur un type différent.

+0

Merci pour votre réponse. Où devrait avoir lieu ce genre de logique? Si nous faisons la mise en correspondance dans la couche modèle (je suppose MVC), alors nous ne sommes pas Muddling Modèle classe avec le modèle Présentation, de sorte que la couche d'accès aux données a besoin de connaître le modèle de présentation? –

+0

Le mappage entre les types de référentiel et les types de modèle de présentation (et vice versa) doit figurer dans le contrôleur. –

+0

Cela signifie que les requêtes linq vont également être dans le contrôleur? (Désolé je suis assez nouveau à cela) –

Questions connexes