Mapping-ein DTO zu einer Entität mit Automapper
Habe ich ein Entity Framework POCO mit der folgenden Struktur.
public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Habe ich einen Daten-Transfer-Objekt für diese Entität verwendet werden, durch die meine Ansichten.
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
}
Nun habe ich das folgende mapping-code in mein Global.asax-Datei.
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); //not sure whether I need this as well?
Alles ist in Ordnung, ich pass das DTO zu meinen Ansichten OK und ich kann eine neue Instanz erstellen Entity
aus meiner EntityDto
Modell. Das problem entsteht, wenn ich versuche, mein edit Entity
; ich bin mir bewusst, dies ist bis zu AutoMapper verlieren die Entität, Schlüssel, EF erstellt, um änderungen zu verfolgen um das Objekt, aber nach der Lektüre durch einige Quellen scheint es nicht zu sein, eine endgültige Lösung. Hier ist die Aktion, die ich zum Bearbeiten meiner Person.
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);
}
Nun, was kann ich tun, um dieses Problem zu lösen? Kann Ich:
- Irgendwie sagen AutoMapper zu
.Ignore()
die Person wichtigen Eigenschaften? - Bekommen AutoMapper zu kopieren aus den Entity-Schlüssel Eigenschaften?
.Attach()
meinem zugeordnetEntity
und den Status auf geändert?
Jede Hilfe immer sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo ist dein Kontext instanziiert? Sie sollten tun, die in Ihrem EditEntity Aktion imo.
Versuchen Weitergabe Einheit als zweiten parameter auf die Zuordnung.
Sonst, entity-Instanz durch eine neue Instanz überschrieben, und Sie verlieren die Entität erstellt in der ersten Zeile.
Entity
aus dem Kontext, es ist nicht nur Ihre Durchschnittliche POCO mehr und so AutoMapper nicht weiß, was zu tun ist.Entity
ist nur ein POCO, damit nicht enthalten, jede weitere Person Zeug, das EF erstellt beim abrufen, so dass ich nicht sagen kann, AutoMapper, um Sie zu ignorieren.Alternative Antwort nicht erforderlich ist, ist Automapper für die DTO auf Entity-Umwandlung ist mit einem DbEntry:
Brauchst du nicht Anhängen/Zustand prüfen, weil du immer die alten Unternehmen erstmalig so hat es die änderungsnachverfolgung mit ihm verbunden. Auch die CurrentValues.SetValues annehmen kann, eine andere Art, in diesem Beispiel updatedEntity ist der DTO. Set-Werte Dokumentation wird erklärt, wie eine solche:
So scheint, wie es bereits durchführen kann, ein automapper-artige Weise.