【问题标题】:Missing type map configuration or unsupported mapping - AutoMapper缺少类型映射配置或不支持的映射 - AutoMapper
【发布时间】:2015-06-03 15:06:34
【问题描述】:

我正在尝试使用 AutoMapper 将 Entity Framework Code First 类映射到 WCF DataContract 类。

代码如下:

[DataContract]
public class User
{
    [DataMember]
    public int UserId { get; set; }
    [DataMember]
    public string UserName { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public string Email { get; set; }
    [DataMember]
    public DateTime DateCreated { get; set; }
    [DataMember]
    public int RoleId { get; set; }
}

public class User1
{
    public int UserId { get; set; }

    [StringLength(255, MinimumLength = 3)]
    public string UserName { get; set; }

    [StringLength(255, MinimumLength = 3)]
    public string Password { get; set; }

    [StringLength(255, MinimumLength = 3)]
    public string Email { get; set; }

    public DateTime DateCreated { get; set; }
    public int RoleId { get; set; }

    [ForeignKey("RoleId")]
    public virtual Role Role { get; set; }
}

public static T Get<T>(this object source) where T : class
{
    Mapper.CreateMap(source.GetType(), typeof(T));
    T destination = default(T);
    Mapper.Map(source, destination);
    return destination;
}

User user = new User();
User1 user1 = user.Get<User1>();

我在执行上面代码的最后一行时遇到了这个异常:

缺少类型映射配置或不支持的映射。

映射类型:对象 -> 用户
System.Object -> DataLayer.User

目标路径:用户

来源值:Service.User

谁能帮忙解决这个问题?

【问题讨论】:

    标签: wcf c#-4.0 automapper


    【解决方案1】:

    缺少类型映射配置或不支持的映射。

    映射类型:对象 -> 用户

    这是因为您传递了一个 object 类型的值,创建了从基础类型 User 到类型 User1 的映射,然后将对象作为源传入,但不存在映射(并且提供的代码中的实际错误消息将引用 User1 而不是 User)

    你可以只使用 Map 的重载,它允许你告诉 AutoMapper 使用什么类型:

    Mapper.Map(source, destination, source.GetType(), typeof(T));
    

    或者,如果您的代码允许,请使用 Map 的重载,它允许您告诉 AutoMapper 使用什么类型,并创建目标对象本身:

     return (T)Mapper.Map(source, source.GetType(), typeof(T));
    

    如果需要,您可能只想考虑创建映射,如下所示:

    public static T Get<T>(this object source)
    {
        if (Mapper.FindTypeMapFor(source.GetType(), typeof (T)) == null)
        {
            Mapper.CreateMap(source.GetType(), typeof (T));
        }
    
        return (T)Mapper.Map(source, source.GetType(), typeof(T));
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2017-04-16
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多