【发布时间】:2018-03-26 10:43:32
【问题描述】:
使用 subDto 自动映射 dto
class productsDTO
{
public int id;
public AddressDTO DeliveryAddress;
}
Class productsViewModel
{
public int id;
public AddressViewModel DeliveryAddress;
}
在这里,我有一个 dto 类。我只想将 dTo 类自动映射到视图模型中。在 DTO 类中有 AddressDTo 必须自动映射到 productsViewModel 中的 AddressViewModel。
如果有人有解决方案,请发布
var products = [some objects];
products.ForEach(a =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<ProductsDTO, ProductsViewModel>()
.ForMember(dest => dest.DeliveryAddress, opts =>opts.Ignore())
.AfterMap((src, dest) => {
dest.DestinationAddress =
Mapper.Map(src.DeliveryAddress,dest.DeliveryAddress);
});
});
IMapper iMapper = config.CreateMapper();
var productList = iMapper.Map<ProductsDTO, ProductsViewModel>(a);
products.add(productList)
});
此代码会产生如下错误:“Mapper 未初始化。使用适当的配置调用 Initialize。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有任何对静态的调用Mapper.Map 方法,如果您使用 ProjectTo 或 UseAsDataSource 扩展方法,请确保传入适当的 IConfigurationProvider 实例。"
【问题讨论】:
-
您需要在 AddressDTO 和 AddressViewModel 之间定义第二个映射。然后,当您在 productsDTO 和 productsViewModel 之间进行映射时,它也会自动映射这些属性。
-
你能用示例代码解释一下吗
-
您创建了 productsDTO 和 productsViewModel 之间的映射(使用 CreateMap),是吗?因此,对其他两个类执行完全相同的操作。
-
var products = [一些对象]; products.ForEach(a =>{ var config = new MapperConfiguration(cfg =>{ cfg.CreateMap
().ForMember(dest => dest.DestinationAddress, opts => opts.Ignore()).AfterMap( (src, dest) => { dest.DestinationAddress = Mapper.Map(src.DestinationAddress, dest.DestinationAddress); }); }); IMapper iMapper = config.CreateMapper(); var productList = iMapper.Map (a); products.add(productList)}); -
这段代码是否正确。但它会产生错误。你能纠正这个
标签: c# automapper