enum
和automapper
的问题
我有一个使用enum
作为属性之一的EF数据集,并使用一个视图模型将其显示在带有enum
和ToString
的网格上以显示文本值enum
我正在使用AutoMapper
将EF类映射到ViewModel类,但是在加载数据时出现错误
System.NotSupportedException:'指定的类型成员 LINQ to Entities不支持'DataTableTypeDisplay'。只要 初始化程序,实体成员和实体导航属性是 支持。
我尝试为DataTableTypeDisplay
的配置添加忽略选项,并且保持不变。
如果我删除此属性,则工作正常,但是网格仅显示int
的{{1}}值
使用Enum
类文件
AutoMapper v7.0.1
查看模型
public class ClassName
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ClassNameId { get; set; }
public DataTableType DataTableType { get; set; }
…
AutoMapper配置
public class ClassNameGridViewModel : ChangeControlBase
{
public Guid? ClassNameId { get; set; }
public DataTableType DataTableType { get; set; } = DataTableType.None;
[NotMapped]
public string DataTableTypeDisplay
{
get { return DataTableType.ToString(); }
}
…
枚举
public ClassNameGridViewModelProfile()
{
CreateMap<NS.ClassName, NS.ClassNameGridViewModel>();
CreateMap<NS.ClassNameGridViewModel, NS.ClassName>();
}
答案 0 :(得分:0)
AFAIK Automapper不使用[NotMapped]
属性。它确实具有[IgnoreMap]
属性,但这意味着将Automapper引用添加到受影响的实体。或者,当您为Entity-> VM配置映射时:
Mapper.CreateMap<ClassName, ClassNameGridViewModel>()
.ForMember(vm => vm.DataTableTypeDisplay, opts => opts.Ignore())
答案 1 :(得分:0)
事实证明该问题并非是Automapper能够按预期工作,我还使用了Telerik DataSource Request,该请求向基础查询添加了排序,过滤器分组和分页功能,因为SQL表中不存在DataTableTypeDisplay列,这是导致错误。
我当前的解决方案是将enum
移动到数据库中的表并通过导航属性进行映射。