我試圖使用Automapper將ViewModel映射到Domain類。當源中不存在屬性時自動映射器映射
但是,ViewModel包含一個不存在於Domain類中的屬性。
相反,我使用Domain類中的一個不同的屬性Product來映射到ViewModel Price屬性,但這看起來沒有起作用。
public class OrderViewModel
{
public IEnumerable<Product> Product { get; set; }
public IEnumerable<Price> Price { get; set; }
}
public class Order
{
public IEnumerable<Product> Product { get; set; }
}
public class Product
{
public string Code { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Amount { get; set; }
public decimal DeliveryCharge { get; set; }
}
public class Price
{
public string UniqueProductCode { get; set; }
public decimal Charge { get; set; }
public decimal CourierCharge { get; set; }
}
在我的映射分佈
然後,我必須設置如下:
public class DomainToViewModelMappingProfile : Profile
{
public override string ProfileName
{
get
{
return "DomainToViewModelMappings";
}
}
public DomainToViewModelMappingProfile()
{
ConfigureMappings();
}
/// <summary>
/// Creates a mapping between source (Domain) and destination (ViewModel)
/// </summary>
private void ConfigureMappings()
{
CreateMap<Core.Domain.Product, Web.Models.Price>()
.ForMember(dest => dest.UniqueProductCode,
opts => opts.MapFrom(src => src.Code))
.ForMember(dest => dest.Charge,
opts => opts.MapFrom(src => src.Amount))
.ForMember(dest => dest.CourierCharge,
opts => opts.MapFrom(src => src.DeliveryCharge));
CreateMap<Core.Domain.Order, OrderViewModel>()
.ForMember(dest => dest.Product,
opts => opts.MapFrom(src => src.Product))
.ForMember(dest => dest.Price,
opts => opts.MapFrom(src => new List<Price>()));
}
}
然後在我的控制,我有:
var list = _productRepository.GetProducts();
Mapper.Map<Order, OrderViewModel>(list);
但價格屬性爲空(NOT NULL)作爲該屬性已被實例化。只是沒有記錄。
我在做什麼錯?
請問你能顯示你用來映射的代碼嗎? – sachin
'.ForMember(dest => dest.Price,opts => opts.MapFrom(src => new List()));'等同於'對於成員'Price',只需創建一個空列表。「 - 你在說什麼? –
stuartd
在映射配置文件代碼@sachin中添加。 – jgill09