2009-05-20 6 views
6

Vous étiez occupé à créer une nouvelle application, essentiellement j'ai mon dataccess, couche de service et couche de présentation ... Tout fonctionne très bien mais j'utilise les classes d'entités qui sont retournées par EF. Problème ici est que je les passe sur la couche de présentation, donc j'ai besoin d'ajouter la référence de l'infrastructure/dataccess à la couche de présentation - PAS BON:Automapper à utiliser avec Entity Framework à l'aide du modèle de référentiel?

Donc mon idée était la suivante et cherchait de l'aide et la confirmation que je suis en descendant les lignes droites ...

  1. Créer un ensemble de classes dans la couche de service comme client, commande, etc., car la couche de présentation a une référence à la couche de service ..

  2. Lorsqu'un client entité est retournée dans le dataccess je retournerais la classe d'entité à savoir le client au service un d je ferais la cartographie ici - Pas trop sûr si j'aime ça? Où seraient les meilleurs endroits pour ces "classes standard" que j'utilise pour le mappage, si je les mets dans la couche de service et que je fais le mappage de l'accès data, alors cela créerait une référence circulaire en tant que service Dataccess> et Service> DATAACCESS .. - il devrait être qu'une seule façon à savoir le service> DATAACCESS

Je pensais à l'aide Automapper (http://www.codeplex.com/AutoMapper) pour prendre soin de cela, je suis sur la bonne voie ??? Comme je dis la seule chose est que quand je reviens de dataaccess à la couche de service (en utilisant Iqueryable) j'ai besoin de mapper ceux-ci à partir des classes d'entités et d'utiliser des classes de collection standard ..

Je pense que c'est là où je suis confus, je pense qu'il n'est pas bon d'utiliser les classes d'entités car cela signifie que j'ai besoin d'une référence à l'entité framework/dataaccess dans ma couche de présentation.

Répondre

3

Vous avez atteint l'un des points faibles de EF v1. Pour l'instant, oui, utiliser AutoMapper vous permet certainement de convertir vos entités EF en entités commerciales «directes» et de les utiliser dans votre couche supérieure. En outre, EF v4 qui est dû à .NET 4.0/Visual Studio 2010 devrait apporter beaucoup de soulagement dans la plupart des domaines à problème - le soutien de vos propres POCOs (Plain Old CLR Objects), et un grand nombre plus. Découvrez le EF Design Blog. L'équipe a posté récemment un certain nombre de messages très intéressants et très prometteurs concernant EF v4. Je suis impatient d'y être!

Marc

0
  1. Vous pouvez utiliser des objets EF dans le projet Web si vous extrayez leurs interfaces dans votre coeur/projet commun et renvoyer les types d'interface du référentiel ou de services, que le projet Web utilise. Vous pouvez faire des objets EF mettre en œuvre vos interfaces, en créant des classes partielles et en ajoutant là:

    classe partielle client: Iaide

  2. Même si vous pouvez le faire 1. truc, vous devriez probablement de toute façon utiliser automapper pour mapper ces entités à vos objets ViewModel personnalisés, qui correspondent à votre vue particulière.Vous pouvez également faire en sorte que les méthodes de requête de référentiel/services retournent directement DTO/ViewModels - cela permettra parfois de rendre les requêtes plus efficaces (en interrogeant uniquement les colonnes nécessaires, etc.), mais cela nécessiterait des mappages EF supplémentaires.

Questions connexes