将Enum自动映射到Entity Framework 5.0复杂类型错误

时间:2013-09-05 12:11:58

标签: entity-framework entity-framework-5 automapper

所以错误是这样的:表达式必须解析为顶级成员而不是任何子对象的属性。

DTO的薪酬是一个Enum。 ContractEntity使用复杂类型的报酬。

抛出错误的代码:

Mapper.CreateMap<ContractDTO, ContractEntity>()
            .ForMember(d => d.Remuneration.ContractType, s => s.MapFrom(z => z.ContractType))
            .ForMember(d => d.Remuneration.Currency, s => s.MapFrom(z => z.Currency))
            .ForMember(d => d.Remuneration.RateUnit, s => s.MapFrom(z => z.RateUnit));

实体框架复杂类型:

 [ComplexType]
public class Remuneration
{
    public decimal Amount { get; set; }
    public int Currency { get; set; }
    public int RateUnit { get; set; }
    public int ContractType { get; set; }    
}

因为我希望目标(ContractEntity)使用整数值,我想我可以将源枚举强制转换为目标整数,如下所示:

.ForMember(d => d.Remuneration.ContractType, s => s.MapFrom(z => (int)z.ContractType))

..显然我不能,并希望有人能澄清为什么这不起作用..

1 个答案:

答案 0 :(得分:1)

如果您遇到复杂类型映射问题,可以基于AutoMapper实现手动映射:

Mapper.CreateMap<PatternDto, PatternModel>().ConvertUsing(pattern =>
                {
                    if(pattern == null) return new PatternModel();
                    return new PatternModel
                        {
                            EmailPattern = pattern.EmailPattern,
                            SmsPattern = pattern.SmsPattern
                        };
                });
祝你好运!