【发布时间】:2016-08-17 05:48:58
【问题描述】:
我需要使用 Entity Framework 和 AutoMapper 将数据库中的整数值投影到枚举值。 问题似乎是这些列在某些情况下可以为空,而在其他情况下则不可为空。 如果它们是可空类型,我想为空值使用默认值(第一个枚举值)。
这是一个完整的、最小的示例,我结合当前的方法。 它是一个控制台应用程序,安装了 Entity Framework 和 AutoMapper 的当前 nuget 包。 它还需要一个具有如下表的数据库(首先是数据库):
CREATE TABLE [dbo].[MyTable] (
[Id] INT PRIMARY KEY,
[EnumValue] INT NOT NULL,
[EnumValueNullable] INT
)
控制台应用程序代码(C#):
public enum MyEnum
{
Value1 = 0,
Value2 = 1
}
public class MyTableModel
{
public int Id { get; set; }
public MyEnum EnumValue { get; set; }
public MyEnum EnumValueNullable { get; set; }
}
public class MyProfile : Profile
{
public MyProfile()
{
this.CreateMap<MyTable, MyTableModel>();
this.CreateMap<int, MyEnum>().ProjectUsing(x => (MyEnum)x);
this.CreateMap<int?, MyEnum>().ProjectUsing(x => x.HasValue ? (MyEnum)x.Value : MyEnum.Value1);
}
}
static void Main(string[] args)
{
var config = new MapperConfiguration(x => x.AddProfile(new MyProfile()));
var result = new MyDataEntities().MyTable.ProjectTo<MyTableModel>(config).ToList();
}
执行此代码时,它告诉我 HasValue 没有为类型 System.Int32 定义。
这当然是正确的,但我假设 AutoMapper 会选择为不可为空的整数指定的版本。
删除任一映射(对于 int 和 int?)都无济于事,同时删除它们或更改顺序。
附带说明一下,我正在一个更大的项目中从版本 3.3.1.0 迁移 AutoMapper。 它似乎适用于该版本中定义的两个地图。
【问题讨论】:
标签: c# entity-framework automapper