2016-09-15 2 views
0

У меня возникли проблемы с 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 о карте в конкретный класс или какие-либо другие предложения, как я могу решить свою проблему?

ответ

2
AutoMapper.Mapper.CreateMap<ModelUser, MyUser>().ReverseMap(); 

We need to do reversemap to get ModelUser . 
+0

спасибо. Так оно и было. Я прочитал много вопросов о stackoverflow, но никогда не сработал .ReverseMap(). – Danscho