4
我有以下类。领域模型是由实体框架创建的,我使用POCO。AutoMapper复杂对象映射 - 映射列表
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedDate{ get; set; }
public DateTime ModifiedDate{ get; set; }
public virtual ICollection<Order> Orders{ get; set; }
}
public class CustomerDTO
{
public int Id { get; set; }
public string Name{ get; set; }
public List<OrderDTO> Orders{ get; set; }
}
public class Order
{
public int Id { get; set; }
public string Name { get; set; }
public int ProductId { get; set; }
public DateTime CreatedDate{ get; set; }
public DateTime ModifiedDate{ get; set; }
}
public class OrderDTO
{
public int Id { get; set; }
public string Name{ get; set; }
}
我曾尝试以下映射。
Mapper.CreateMap<Customer, CustomerDTO>();
Mapper.CreateMap<CustomerDTO, Customer>();
Mapper.CreateMap<Order, OrderDTO>();
Mapper.CreateMap<OrderDTO, Order>();
我也曾尝试
Mapper.CreateMap<CustomerDTO, Customer>().ForMember(c => c.Orders,
m => m.MapFrom
(
q => Mapper.Map<List<OrderDTO>, ICollection<Order>>(q.Orders)
)
);
为了更新客户i从数据库中检索,并与customerDTO
Customer customer = _customerRepository.GetById(customerDTO.Id);
Mapper.Map<CustomerDTO, Customer>(customerDTO, customer);
客户对象更新它是正确更新和创建和修改日期不会更改。但订单列表中的每个订单都没有正确更新。它的productId,创建日期和修改日期被设置为默认值,而不是从数据库中检索的值。
因为Orders是一个虚拟集合,我还需要做些什么吗?
我是新来的自动映射的任何帮助赞赏。
编辑
我加
Mapper.AssertConfigurationIsValid();
在收到应用程序启动以下错误: 未映射成员被发现。查看下面的类型和成员。 添加自定义映射表达式,忽略,添加自定义解析,或修改源/目标类型
我更新我的映射:
Mapper.CreateMap<OrderDTO, Order>()
.ForMember(x => x.CreatedDate, y => y.Ignore())
.ForMember(x => x.ModifiedDate, y => y.Ignore())
.ForMember(x => x.ProductId, y => y.Ignore())
但顺序仍具有上述特性由覆盖默认谷
同样的问题!做“地图”=属性'Id'和'UpdateDate'将被设置为默认值,而不是将其忽略为定义的“CreateMap”... 您是否找到解决方案? – dataCore