2009-11-19 5 views
3

Je suis déconcerté.Comment surmonter la différence d'impédance Model → ViewModel?

J'ai mon modèle LINQ to SQL qui est un miroir d'une table de base

(Id, CustomerId, RegionId,...N), 

rien intéressant, toutes les clés étrangères. Maintenant, j'ai besoin de voir ces données dans ma vue asp.net. Je crée un ViewModel

(Id, CustomerId, Customer, RegionId, Region, CustomersSelectList, RegionsSelectList). 

De toute évidence, le viewmodel est un surensemble d'un modèle LINQ to SQL.

Maintenant, comment puis-je transformer l'un à l'autre? J'utilise automapper mais perplexe quant à la façon de trouver de bons modèles pour obtenir des données manquantes.

Je vois des solutions possibles:

  1. Créer 3ème classe, qui sera un modèle L2S + valeurs jointes et remplir cette classe en se joignant et la projection. Puis automap cette classe à mon viewmodel.

  2. Renvoyez des classes anonymes par projection et mappez-les aux viewmodels via automapper (pas très propre).

  3. Créer des vues db pour l'interrogation (les vues sont toutes les tables obligatoires réunies).

S'il vous plaît me aider, parce que plus tôt, je me sers de mes cours de L2S directement dans les vues (sur des projets simples), maintenant j'ai vues plus complexes et ont besoin de faire quelque chose pour lutter contre la complexité.

Aussi, à qui incombe la responsabilité de cette transformation? Où cela devrait-il arriver?

Merci.

MISE À JOUR: laissez-moi clarifier un peu. Je dois pouvoir obtenir une représentation complète et à plat de mon entreprise. En db, il est stocké dans plusieurs tables, dans L2S il y a beaucoup de classes (tables db mirror), dans ma ViewModel il devrait être 'accumulé' à partir de nombreuses tables db.

Dois-je effectuer des jointures sql via linq et remplir directement le ViewModel?

Dois-je créer une entité commerciale (non linq one), avec tous les champs, et la remplir avec linq to sql, puis la convertir automatiquement en ViewModel? Dois-je cesser d'utiliser la classe L2S en tant qu'entreprise commerciale, créer une nouvelle classe d'entité commerciale à partir de rien et traiter le L2S comme un ORM idiot à la place?

Répondre

1

Je ne connais pas suffisamment automapper pour savoir si cela fonctionnera réellement, mais je pense que vous pourriez le faire en deux étapes. Tout d'abord, laissez automapper mapper toutes les propriétés qui sont des miroirs les unes des autres. Ensuite, vous avez la logique dans les autres propriétés qui peuvent obtenir les valeurs correctes ou les définir à partir de l'objet qui a initié le mappage.

Questions connexes