缺少类型映射配置或不支持的映射 - AutoMapper
Missing type map configuration or unsupported mapping - AutoMapper
我正在尝试使用 AutoMapper 将 Entity Framework Code First class 映射到 WCF DataContract class。
代码如下:
[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>();
我在执行上面代码的最后一行时遇到此异常:
Missing type map configuration or unsupported mapping.
Mapping types: Object -> User
System.Object -> DataLayer.User
Destination path: User
Source value: Service.User
谁能帮忙解决这个问题?
缺少类型映射配置或不支持的映射。
映射类型:对象 -> 用户
这是因为您要传递类型 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));
}
我正在尝试使用 AutoMapper 将 Entity Framework Code First class 映射到 WCF DataContract class。
代码如下:
[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>();
我在执行上面代码的最后一行时遇到此异常:
Missing type map configuration or unsupported mapping.
Mapping types: Object -> User
System.Object -> DataLayer.UserDestination path: User
Source value: Service.User
谁能帮忙解决这个问题?
缺少类型映射配置或不支持的映射。
映射类型:对象 -> 用户
这是因为您要传递类型 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));
}