2013-09-25 187 views
0

我:Automapper地圖(十進制,貨幣)貨幣

​​

的錢接近其從這裏:

http://martinfowler.com/eaaCatalog/embeddedValue.html

http://martinfowler.com/eaaCatalog/money.html

我有一個配置對於Autmapper:

public class MoneyProfile : Profile 
{ 
    protected override void Configure() 
    { 
     Mapper.CreateMap<decimal, Money>().ConvertUsing<MoneyToDecimalTypeConverter>(); 
     Mapper.CreateMap<Money, decimal>().ConvertUsing<DecimalToMoneyTypeConverter>(); 
    } 

    public class DecimalToMoneyTypeConverter : ITypeConverter<Money, decimal> 
    { 
     public decimal Convert(ResolutionContext context) 
     { 
      return ((Money)context.SourceValue).Amount; 
     } 
    } 

    public class MoneyToDecimalTypeConverter : ITypeConverter<decimal, Money> 
    { 
     public Money Convert(ResolutionContext context) 
     { 
      return new Money((decimal)context.SourceValue); 
     } 
    } 
} 

public class PersonProfile : Profile 
{ 
    protected override void Configure() 
    { 
     var mapDomainToDb = Mapper.CreateMap<Person, PersonDb>(); 
     mapDomainToDb.ForMember(db => db.SalaryAmount, options => options.MapFrom(domain => domain.Salary.Amount)); 
     mapDomainToDb.ForMember(db => db.SalaryCurrencyCode, options => options.MapFrom(domain => domain.Salary.CurrencyCode)); 

     var mapDbToDomain = Mapper.CreateMap<PersonDb, Person>(); 
     // ????? 
    } 
} 

我不知道如何將Db映射到域,我如何從小數和字符串創建Money對象。任何人都可以幫助我,我第一次使用automapper。

回答

1

你應該只能夠做這樣的事情:

Mapper.CreateMap<PersonDb, Person>() 
    .AfterMap((src, dest) => { 
     dest.Salary = new Money(); 
     dest.Salary.Amount = src.SalaryAmount; 
     dest.Salary.CurrencyCode = enum.Parse(typeof(CurrencyCodeType), src.SalaryCurrencyCode); 
    }); 

編輯:對不起我的事情錯誤的順序。 Editted。

+0

嗨西蒙感謝您的回答。 (x => x.Salary.Amount,opt => opt.MapFrom(y => y.SalaryAmount)) 我得到這個錯誤: Expression'x => Convert(x.Salary.Amount )'必須解析爲頂級成員,而不是任何子對象的屬性。 改爲在子類型或AfterMap選項上使用自定義解析器。 – ramo2712

+0

當然哦。好吧,我。你可以使用'AfterMap' ..我會更新我的答案。 –

+0

已更新。有可能是一個更好的方法來做到這一點,但我現在無法檢查:/ –