有谁知道EF6和AutoMapper的枚举转换发生了什么

时间:2014-02-18 05:43:04

标签: c# entity-framework automapper

我遇到了一个问题,我已经将应用程序从EF4.1更新到6.0.2,以便继续使用迁移。但由于升级后的automapper现在无法将id转换为枚举,因此我使用以下代码及其工作很长时间。

Mapper.CreateMap<Payment, ListTowDto>()
    .ForMember(x => x.PaymentStatus, 
        opt => opt.MapFrom(s => Enum.GetName(typeof(PaymentStatus), s.PaymentStatusId)))

有什么新东西需要注意吗?

此外,我已将AutoMapper升级到3.1.1(使用的是autmapper 2.?和ef 4.1)

修改

我收到以下错误:

  

异常详细信息:System.Data.SqlClient.SqlException:无效的列名称'PaymentStatus'

转换为的dto对象中包含以下内容:

public int ApprovalStatusId { get; set; }    
public virtual ApprovalStatus ApprovalStatus { get; set; }

干杯

1 个答案:

答案 0 :(得分:1)

好的我已经解决了。

对于那些从EF4升级到EF6并在实体模型中使用Enum虚拟参考以自动填充AutoMapper等的人,您需要使用 [NotMapped] 注释虚拟字段

因此,在我的情况下,以下内容将提供与Entity Framework 5引入Enum支持之前相同的功能

public int ApprovalStatusId { get; set; } 
[NotMapped]   
public virtual ApprovalStatus ApprovalStatus { get; set; }

对于那些想要在EF5 +实体模型中声明枚举的人,你需要在模型中声明枚举,所以如果我将来从头开始创建这个模型,我会从我的模型中删除我的int PaymentStatusId,并且还要从ApprovalStatus中删除虚拟关键字,因为在这种情况下它变得无用。

public ApprovalStatus ApprovalStatus { get; set; }

数据库会将枚举的int值存储到ApprovalStatus的数据存储列中。

干杯。