我有以下两个类(为简洁起见,省略了许多属性)。
服务层 POCO:
public class TicketFlag
{
public ContactKey ContactKey;
}
LINQ to SQL 生成 POCO:
public class TicketFlag
{
public string ContactKey;
}
当尝试使用 AutoMapper 在服务调用 -> 数据库保存这两个之间进行映射时,出现以下异常:
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
---> System.ArgumentException: Type 'ContactKey' does not have a default constructor
ContactKey 故意没有默认构造函数。基本上,它需要一个字符串和一个对象列表,并且可以序列化/反序列化自身。
我尝试创建一个映射函数(它是逆函数),如下所示:
Mapper.CreateMap<string, ContactKey>().ConvertUsing(s => ContactKeySerializer.Serialize(s));
但我仍然收到投诉,因为 ContactKey 没有默认构造函数。
有没有办法让 AutoMapper 不使用默认构造函数来进行属性映射?实际上,仅仅在 ContactKey 上映射属性是不够的 - 我需要让它调用构造函数,或者从我的 ContactKeySerializer 类中吐出。
最佳答案
首先,你可能应该是using properties对于这些东西,而不是领域。但是,我怀疑这就是您问题的一部分。
您可以尝试将映射的这一部分从一个 TicketFlag
制作为从 string
到 ContactKey
的映射,而不是尝试创建从另一个:
Mapper.CreateMap<LINQtoSQL.TicketFlag, Service.Layer.TicketFlag>()
.ForMember(dest => dest.ContactKey,
mem => mem.ResolveUsing(src => ContactKeySerializer.Serialize(src.ContactKey)));
我认为这可以防止您遇到的错误。
关于c# - 我可以使用 AutoMapper 在两个不可变字段之间进行映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036270/