c# - 有谁知道 EF6 和 AutoMapper 进行枚举转换时发生了什么

标签 c# entity-framework automapper

遇到问题,我已将应用程序从 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/

相关文章:

C# Identfiy 屏幕编号?

c# - 如何防止 EF "The context cannot be used while the model is being created"错误?

c# - 为什么在 Windows 8 应用程序中共享图像时邮件选项不可用?

C#从excel文件中读取数据结果###

c# - 如何在 C# 上声明和实现一个继承自另一个 COM 接口(interface)的 COM 接口(interface)?

wcf - 如何修复 WCF 的循环引用问题

c# - 如何使用 Entity Framework 6 将数据列表传递给存储过程

linq - 将 LINQ/AutoMapper 项目展平至嵌套子项

c# - AutoMapper 通用转换

reflection - AutoMapper 在哪些方法中使用反射?