다음 클래스와 해결자가 제공되는 이유는 무엇입니까? ProductAddModel이 전혀 전달되지 않는 이유가 없습니다.AutoMapper 해결자가 예상 유형을 전달하지 않습니다.
AutoMapper.AutoMapperMappingException 사용자 코드 공급
= 메시지 값은 입력 System.Decimal이다 의해 처리되지 않은했지만 AuctionCMS.Framework.Models.Admin.ProductAddModel 예상. 리졸버 소스 유형을 변경하거나 제공된 소스 값을 FromMember를 사용하여 값 리졸버로 리디렉션하십시오.
유형 :
public class Currency
{
public Int64 Value { get; set; }
// Spot saved for currency type and any other extra properties
}
public class Product
{
public Currency Price { get; set; }
public Currency ReservePrice { get; set; }
}
public class ProductAddModel
{
public Decimal Price { get; set; }
public Decimal ReservePrice { get; set; }
}
확인자 코드 :
public class DecimalToCurrencyValueResolver : ValueResolver<decimal, Currency>
{
#region Overrides of ValueResolver<decimal,Currency>
protected override Currency ResolveCore(decimal source)
{
return new Currency() { Value = (Int64)((decimal)source) * 1000 };
}
#endregion
}
public class CurrencyToDecimalValueResolver : ValueResolver<Currency, decimal>
{
#region Overrides of ValueResolver<decimal,Currency>
protected override decimal ResolveCore(Currency source)
{
return (decimal)source.Value * 1000;
}
매핑 코드 : 내가 잘못하고 간단하게 처리 할 수있는 가장 좋은 방법이 접근 방식입니다 무엇
Mapper.CreateMap<ProductAddModel, Product>()
.ForMember(x => x.Price, opt => opt.ResolveUsing<DecimalToCurrencyValueResolver>())
.ForMember(x => x.ReservePrice, opt => opt.ResolveUsing<DecimalToCurrencyValueResolver>());
Mapper.CreateMap<Product, ProductAddModel>()
.ForMember(x => x.Price, opt => opt.ResolveUsing<CurrencyToDecimalValueResolver>())
.ForMember(x => x.ReservePrice, opt => opt.ResolveUsing<CurrencyToDecimalValueResolver>());
var model = new ProductAddModel();
var product = new Product();
Mapper.Map<ProductAddModel, Product>(model, product);
매핑 프로세스 중에 변환합니까?
감사합니다.
나는 거의 같은 결론에 도달했습니다. 감사! – rboarman
완벽! 정확히 내 문제를 해결하는 데 필요한 힌트. –