遇到问题,我已将应用程序从 EF4.1 更新到 6.0.2 以利用 future 的迁移。但是由于现在升级 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)
编辑:
我收到以下错误:
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'PaymentStatus'
被转换为的 dto 对象中包含以下内容:
public int ApprovalStatusId { get; set; }
public virtual ApprovalStatus ApprovalStatus { get; set; }
干杯
最佳答案
好的,我解决了。
对于那些从 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 中删除 virtual 关键字,因为它在这种情况下变得无用。
public ApprovalStatus ApprovalStatus { get; set; }
数据库会将枚举的 int 值存储到 ApprovalStatus 的 datastore 列。
大家干杯。
关于c# - 有谁知道 EF6 和 AutoMapper 进行枚举转换时发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845267/