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に特定のクラスにマップする方法を知っている人や、私の問題をどのように解決できるか他に何か提案がありますか?
ありがとうございました。それがそれでした。私は多くのstackoverflowの質問を読んだことがありますが、ReverseMap()は上回りませんでした。 – Danscho