我遇到了一个问题,我已经将应用程序从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; }
干杯
答案 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的数据存储列中。
干杯。