ASP.net MVC - dois-je utiliser AutoMapper de ViewModel pour Entity Framework entités?
Je suis actuellement en utilisant AutoMapper à la carte de mon Entity Framework entités à mon avis, Modèle:
public class ProductsController : Controller
{
private IProductRepository productRepository;
public ProductsController(IProductRepository productRepository)
{
this.productRepository = productRepository;
}
public ActionResult Details(int id)
{
var product = productRepository.GetProduct(id);
if( product == null )
return View("NotFound");
ProductDetailsViewModel model = Mapper.Map<Product, ProductDetailsViewModel>(product);
return View(model);
}
}
Cela fonctionne bien. La question que j'ai, c'est quand j'en ai besoin pour aller de mon point de Vue le Modèle de l'entité, afin de mettre à jour la base de données. Dois-je utiliser AutoMapper pour cela? Est-ce une mauvaise/pratique dangereuse?
Il semble que AutoMapper est bon pour l'aplatissement d'un type complexe pour un simple (plat) type, mais jusqu'à présent, j'ai du mal en essayant de passer d'un plat/simple à la plus complexe de type comme mon entité avec les différentes propriétés de navigation.
Si c'est une mauvaise idée d'utiliser AutoMapper pour ce faire, alors ce serait mon code pour ressembler à une action de création?
public ActionResult Create(CreateProductViewModel model)
{
if( ModelState.IsValid )
{
//what do i do here to create my Product entity?
}
}
Ce sujet d'une action d'Édition?
public ActionResult Edit(int id, EditProductViewModel model)
{
Product product = productRepository.GetProduct(id);
//how do i convert my view model to my entity at this point???
}
- votre viewmodel pourrait avoir une propriété de l'entité Produit, de cette façon, vous n'aurez pas besoin de les convertir à tous.
- Cet article propose quelques suggestions. lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models
Vous devez vous connecter pour publier un commentaire.
Je suis de l'état d'esprit que la mise à jour de vos entités est un assez grosse affaire et qu'aucun outil automatisé devrait jamais être utilisé. Définissez les propriétés manuellement.
Oui ses une très petite quantité de plus de code mais automapper ou de l'exécution updatemodel sur les entités de base de données peut parfois avoir des conséquences inattendues. Mieux assurez-vous que votre écriture est fait correctement.
Model.Property = ViewModel.Property
Domain.Entity.Property
". Félicitations: votre point de vue les modèles sont désormais rompu à cause de leur utilisation implicite deProperty
.- Je utiliser AutoMapper spécialisés dans la cartographie de la classe qui comprend la façon de faire d'un modèle complexe à partir d'un simple. AutoMapper est utilisé pour traiter le one-to-one mapping et la logique personnalisée dans la classe pour faire des choses plus complexes (comme les relations, etc.). Tous les AutoMapper de la configuration se fait dans le constructeur statique pour le mappage de classe, qui valide également la configuration du mappage de sorte que les erreurs de l'échec précoce.
Vous pouvez également essayer de configuration AutoMapper à la carte uniquement des propriétés Scalaires (au lieu d'avoir à
.Ignore()
chaque propriété que vous ne voulez pas qu'elle (y compris les propriétés héritées comme.EntityKey
et.EntityState
).Quelques infos à http://www.prosoftnearshore.com/blog/post/2012/03/14/Using-AutoMapper-to-update-Entity-Framework-properties.aspx
Essentiellement mappant automatiquement est mauvais, j'ai écrit un billet de blog sur ce http://blog.gavryli.uk/2015/12/02/why-automapping-is-bad-for-you/