2016-09-15 3 views
0

AutoMapper와 현재 ASP.NET ID 구현에 문제가 있습니다.AutoMapper에서 파생 형식을 기본 형식으로 변환

내 EF 코드 첫 번째 모델은 자체 어셈블리에 있습니다 (다른 소프트웨어와의 하위 호환성 때문에 .NET 4.0으로 컴파일 됨).

ASP.NET ID (.NET 4.5 이상 필요)를 사용하려면 데이터베이스 모델 클래스에서 상속 받고 내 IUser<MyUser, int>을 구현하는 웹 응용 프로그램에 별도의 클래스를 만들었습니다. StartUp.cs에서

//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 구성 :

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 질문을 읽었지만 결코 넘어서 넘어 가지 않았다. 반동지도(). – Danscho

관련 문제