O automapper pode mapear uma chave estrangeira para um objeto usando um repositório?
Estou testando o código de estrutura de entidade primeiro CTP4. Suponha que eu tenha:
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>();
Mapear para o modelo Editar não é um problema. Na minha tela, seleciono a mãe através de algum controle (lista suspensa, preenchimento automático, etc.) e o ID da mãe é postado de volta:
[HttpPost]
public ActionResult Edit(ChildEdit posted)
{
var repo = new TestContext();
var mapped = Mapper.Map<ChildEdit, Child>(posted); // <------- ???????
}
Como devo resolver o último mapeamento? Eu não quero colocar Mother_Id no objeto Child. Por enquanto, uso esta solução, mas espero que possa ser resolvida no Automapper.
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);
EDITAR Isso funciona, mas agora eu tenho que fazer isso para cada chave estrangeira (BTW: o contexto seria injetado na solução final):
Mapper.CreateMap<ChildEdit, Child>();
.ForMember(i => i.Mother,
opt => opt.MapFrom(o =>
new TestContext().Parents.Find(o.MotherId)
)
);
O que eu realmente gostaria seria:
Mapper.CreateMap<int, Parent>()
.ForMember(i => i,
opt => opt.MapFrom(o => new TestContext().Parents.Find(o))
);
Mapper.CreateMap<ChildEdit, Child>();
Isso é possível com o Automapper?