我在使用AutoMapper和我当前的ASP.NET身份实现时遇到了一些问题。
我的EF代码第一个模型驻留在它自己的程序集中(由于与其他软件的向后兼容性而使用.NET 4.0编译)。
要使用ASP.NET Identity(至少需要.NET 4.5),我在webapplication中创建了一个单独的类,它继承自数据库模型类并实现IUser<MyUser, int>
。
//DB-Assembly: .NET 4.0 Code-First Model
public class ModelUser
{
//omitted for brevity
}
//Webapplication: .NET 4.5 -> because I want to use ASP.NET Identity
public class MyUser : ModelUser, IUser<MyUser, int> {}
//ASP.NET Identity UserStore implementation
public class UserStore : IUserStore<MyUser, int>
{
//Works like a charm
public Task UpdateAsync(MyUser user)
{
MyUser dbUser = _ctx.Users.Find(user.Id);
ModelUser mappedUser = Mapper.Map(user, dbUser);
_ctx.Users.AddOrUpdate(u => u.Id, mappedUser);
return Task.FromResult(_ctx.SaveChanges());
}
//Throws "Mapping and metadata information could not be found for EntityType"
public Task CreateAsync(MyUser user)
{
ModelUser dbUser = new ModelUser();
ModelUser mappedUser = Mapper.Map(user, dbUser); //returns MyUser instead of ModelUser at runtime
_ctx.Users.Add(mappedUser);
return Task.FromResult(_ctx.SaveChanges());
}
}
StartUp.cs中的AutoMapper配置:
Mapper.Initialize(cfg => cfg.CreateMap<ModelUser, MyUser>());
AutoMapper的默认行为是映射到最具体的类。 我希望相反。
有谁知道如何告诉AutoMapper映射到特定的类,或者有任何其他建议我如何解决我的问题?
答案 0 :(得分:2)
AutoMapper.Mapper.CreateMap<ModelUser, MyUser>().ReverseMap();
We need to do reversemap to get ModelUser .