2016-09-15 7 views
0

AutoMapperと現在のASP.NET IDの実装に問題があります。AutoMapperの派生型を基底型に変換する

私のEFコードの最初のモデルは、他のソフトウェアとの下位互換性のため、.NET 4.0でコンパイルされた独自のアセンブリに存在します。

ASP.NET ID(少なくとも.NET 4.5が必要)を使用するには、Webアプリケーションでデータベースモデルクラスから継承し、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に特定のクラスにマップする方法を知っている人や、私の問題をどのように解決できるか他に何か提案がありますか?

答えて

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

We need to do reversemap to get ModelUser . 
+0

ありがとうございました。それがそれでした。私は多くのstackoverflowの質問を読んだことがありますが、ReverseMap()は上回りませんでした。 – Danscho

関連する問題