我正在尝试使用 AutoMapper 将 CustomerDTO 映射到我的域实体 ICustomer。对于第一个继承级别,一切正常,但对于其他继承级别则不然。
我正在为我的领域模型使用接口(interface),因为具体类型是由 StructureMap 从我的 LinqToSql 数据库基础设施层注入(inject)的。
public interface IBaseEntity<TPk>
{
TPk Id { get; }
}
public interface ICustomer : IBaseEntity<int>
{
string Email { get; set; }
}
[DataContract]
public class CustomerDTO
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Email { get; set; }
}
现在是 AutoMapper 映射
Mapper.CreateMap<CustomerDTO, ICustomer>();
Mapper.CreateMap<ICustomer, CustomerDTO>();
Mapper.AssertConfigurationIsValid();
现在我在哪里使用映射
public CreateCustomerServiceResult CreateCustomer(CustomerDTO customer)
{
var result = new CreateCustomerServiceResult();
try
{
var originalMapped = Mapper.DynamicMap<CustomerDTO, ICustomer>(customer);
var newCustomer = _customerService.CreateCustomer(originalMapped);
var newMapped = Mapper.DynamicMap<ICustomer, CustomerDTO>(newCustomer);
result.Customer = newMapped;
}
catch (Exception ex)
{
}
return result;
}
我在“Id”属性上有一个Dictionnary missing Key Exception ...
最佳答案
知道了!
问题是由于 IBaseEntity 的“Id”属性缺少 setter。
修改后一切正常
public interface IBaseEntity<TPk>
{
TPk Id { get; set; }
}
关于c# - 具有通用类型继承的 AutoMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823947/