Kann Automapper einen Fremdschlüssel mit einem Repository einem Objekt zuordnen?
Ich probiere zuerst den Entity Framework Code CTP4 aus. Angenommen, ich habe:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public Parent Mother { get; set; }
}
public class TestContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
}
public class ChildEdit
{
public int Id { get; set; }
public string Name { get; set; }
public int MotherId { get; set; }
}
Mapper.CreateMap<Child, ChildEdit>();
Die Zuordnung zum Bearbeitungsmodell ist kein Problem. Auf meinem Bildschirm wähle ich die Mutter über eine Auswahlliste (Dropdown-Liste, Autocompleter usw.) aus, und die ID der Mutter wird auf der Rückseite angezeigt:
[HttpPost]
public ActionResult Edit(ChildEdit posted)
{
var repo = new TestContext();
var mapped = Mapper.Map<ChildEdit, Child>(posted); // <------- ???????
}
Wie soll ich das letzte Mapping lösen? Ich möchte Mother_Id nicht in das Child-Objekt einfügen. Im Moment benutze ich diese Lösung, aber ich hoffe, dass sie in Automapper gelöst werden kann.
Mapper.CreateMap<ChildEdit, Child>()
.ForMember(i => i.Mother, opt => opt.Ignore());
var mapped = Mapper.Map<ChildEdit, Child>(posted);
mapped.Mother = repo.Parents.Find(posted.MotherId);
BEARBEITE Das funktioniert, aber jetzt muss ich das für jeden Fremdschlüssel tun (BTW: Kontext würde in die endgültige Lösung eingefügt):
Mapper.CreateMap<ChildEdit, Child>();
.ForMember(i => i.Mother,
opt => opt.MapFrom(o =>
new TestContext().Parents.Find(o.MotherId)
)
);
as ich wirklich gerne hätte, wäre:
Mapper.CreateMap<int, Parent>()
.ForMember(i => i,
opt => opt.MapFrom(o => new TestContext().Parents.Find(o))
);
Mapper.CreateMap<ChildEdit, Child>();
Ist das mit Automapper möglich?