【问题标题】:AutoMapper map derived type to base typeAutoMapper 将派生类型映射到基本类型
【发布时间】:2016-09-15 11:54:35
【问题描述】:

我在使用 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 映射到特定的类,或者对我如何解决我的问题有任何其他建议?

【问题讨论】:

    标签: asp.net automapper asp.net-identity-2 asp.net-mvc-5.2


    【解决方案1】:
    AutoMapper.Mapper.CreateMap<ModelUser, MyUser>().ReverseMap(); 
    
    We need to do reversemap to get ModelUser .
    

    【讨论】:

    • 非常感谢。做到了。我已经阅读了很多 stackoverflow 问题,但从未被 .ReverseMap() 绊倒。
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多