簡體   English   中英

AutoMapper將派生類型映射為基本類型

[英]AutoMapper map derived type to base type

我在使用AutoMapper和當前的ASP.NET Identity實現時遇到一些問題。

我的EF代碼優先模型駐留在其自己的程序集中(由於與其他軟件的向后兼容性,因此與.NET 4.0編譯在一起)。

為了使用ASP.NET Identity(至少需要.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映射到特定的類,或者有其他建議可以解決我的問題?

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

We need to do reversemap to get ModelUser .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM