Le mappage d'un DTO une Entité avec Automapper
J'ai une Entité Cadre POCO avec la structure suivante.
public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
J'ai créé un Objet de Transfert de Données pour cette entité à être utilisé par mon point de vue.
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
}
Maintenant, j'ai le texte suivant du code de mappage dans mon Global.asax fichier.
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); //not sure whether I need this as well?
Tout fonctionne bien, je passe la DTO de mon point de vue sur OK et je peux créer une nouvelle instance de Entity
de mon EntityDto
modèle. Le problème se pose lorsque j'essaie de modifier mon Entity
; je suis conscient de ce qui est en bas à AutoMapper perdre de l'Entité Clé EF crée pour suivre les modifications apportées à l'objet, mais après avoir lu quelques sources il ne semble pas être une solution définitive. Ici est l'action que j'utilise pour modifier mon entité.
public ActionResult EditEntity(EntityDto model)
{
var entity = context.Entities.Single(e => e.Id == model.Id);
entity = Mapper.Map<EntityDto, Entity>(model); //this loses the Entity Key stuff
context.SaveChanges();
return View(model);
}
Maintenant, que dois-je faire pour résoudre ce problème? Puis-Je:
- En quelque sorte dire AutoMapper à
.Ignore()
l'Entité propriétés de Clé? - Obtenir AutoMapper pour la copie de l'Entité propriétés de Clé?
.Attach()
mon mappéEntity
et de définir l'état de modifié?
Toute aide toujours apprécié.
OriginalL'auteur Paul Aldred-Bann | 2012-10-31
Vous devez vous connecter pour publier un commentaire.
Où est votre contexte instancié? Vous devriez le faire dans votre EditEntity action de l'omi.
C'est exactement ce que je cherchais, merci encore!
Content d'avoir pu alt-tab et copier coller.. je veux dire vous aider. 🙂
OriginalL'auteur Pluc
Essayer de passer de l'entité en tant que second paramètre de votre cartographie.
Sinon, votre instance d'entité est remplacée par une nouvelle instance, et vous perdez de l'entité créée dans la première ligne.
Entity
le contexte, il n'est pas seulement votre moyenne POCO et plus si AutoMapper ne sais pas quoi faire.si il y a d'autres propriétés sur l'Entité que vous n'avez pas dans la liste, vous pouvez tout aussi bien vouloir dire AutoMapper de les ignorer: .ForMember(dest => dest.PropertyToIgnore, opt => opt.UseDestinationValue)
C'est la question, à l'époque, je suis la création de mon AutoMapper mappages
Entity
est juste un POCO, donc ne contiennent pas de l'extra entité trucs que EF crée lors de la récupération, donc je ne peux pas dire AutoMapper de les ignorer.Saint CRUD je ne sais pas qui pourrait le faire avec la Carte. Incroyable.
merci beaucoup , c'résoudre mon problème
OriginalL'auteur dark_ruby
Une alternative réponse qui ne nécessite pas Automapper pour la DTO de l'Entité de conversion est à l'aide d'un DbEntry:
Vous n'avez pas besoin d'attacher/vérification d'état parce que vous êtes l'obtention de l'ancienne entité d'abord donc, il a suivi des modifications attaché à elle. Aussi, le CurrentValues.SetValues peut accepter d'un autre type, dans cet exemple updatedEntity est la DTO. Définir les Valeurs de la documentation est expliqué comme tel:
Semble comme il peut déjà effectuer dans un automapper-esque.
OriginalL'auteur SventoryMang