У меня возникли проблемы с AutoMapper и моей текущей реализацией ASP.NET Identity.AutoMapper map производный тип базового типа
Моя первая модель кода EF находится в собственной сборке (скомпилирована с .NET 4.0 из-за обратной совместимости с другим программным обеспечением).
Чтобы использовать идентификатор ASP.NET (которому требуется хотя бы .NET 4.5), я создал отдельный класс в своем веб-приложении, который наследуется от класса модели базы данных и реализует 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());
}
}
конфигурации AutoMapper в StartUp.cs:
Mapper.Initialize(cfg => cfg.CreateMap<ModelUser, MyUser>());
поведение по умолчанию от AutoMapper является отображение на наиболее конкретный класс. Я хочу наоборот.
Кто-нибудь знает, как сообщить AutoMapper о карте в конкретный класс или какие-либо другие предложения, как я могу решить свою проблему?
спасибо. Так оно и было. Я прочитал много вопросов о stackoverflow, но никогда не сработал .ReverseMap(). – Danscho