2011-07-31 9 views
1

Je ne suis pas sûr que cela soit possible avec Entity Framework, mais je duplique trop d'objets de remplissage de code.LINQ w/Entity Framework - Objets de remplissage

Actuellement mes méthodes font quelque chose comme:

return (from s in context.some_table 
    join u in context.user_table on s.user_id equals u.id 
    where s.id == someId 
    select new MyObject() 
    { 
     TableColumn = s.some_column, 
     User = new MyUser() 
     { 
      Username = u.username, 
      Id = u.id, 
     } 
    }.FirstOrDefault(); 

Je viens tapés comme un exemple. J'ai beaucoup de questions où j'inclus des informations sur l'utilisateur (plus que juste dans cet exemple). Donc, dans toutes mes requêtes, je mets le même morceau de code. Si j'ai 100 méthodes avec ce morceau de code et que je veux ajouter une autre colonne qui est retournée alors je dois mettre à jour 100 méthodes. Douleur dans les fesses.

Ce que je voudrais faire est de remplir l'objet Utilisateur par une méthode réutilisable. De cette façon, l'ajout/la suppression de colonnes renvoyées ne doit être modifié qu'à un seul endroit. Comme:

return (from s in context.some_table 
    join u in context.user_table on s.user_id equals u.id 
    where s.id = someId 
    select new MyObject() 
    { 
     TableColumn = s.some_column, 
     User = FillUser(u) 
    }.FirstOrDefault(); 

FillUser serait la méthode. Bien sûr, cela ne fonctionne pas avec Entity Framework.

Y a-t-il quelque chose que je puisse faire du tout? Je pourrais bien sûr retourner toute la table des utilisateurs mais c'est beaucoup plus d'infos que j'en ai besoin donc c'est un gâchis. J'utilise. NET 4.0 si cela aide.

Répondre

2

Entity framework est un outil ORM dont le but principal est de définir le mappage de la base de données aux objets et de charger les entités en fonction de ce mappage. Évidemment, si vous avez besoin de 100 fois la même projection d'utilisateur, il s'agit d'un scénario pour une vue de base de données mappée, personnalisée defining query ou personnalisée query view. Vous abusez des projections au lieu de créer un mappage réutilisable.

+0

Si la création d'objets avec un sous-ensemble de données à partir de tables au lieu de renvoyer toutes les données à partir d'eux en abuse alors Microsoft devrait vraiment mettre à jour leurs exemples. – GregInWI2

+1

Pourquoi devraient-ils? La projection est OK si vous n'avez pas besoin de la répéter 100 fois. Si vous avez besoin de l'utiliser 100 fois, c'est un exemple pour 'QueryView' et c'est la raison pour laquelle' QueryView' existe - pour avoir la possibilité de réutilisation. –

+0

@ GregInWI2: vous avez vraiment shuold utiliser le mappage de table. – Naor