【问题标题】:Automapper using ViewModel property in SqlAutomapper 在 Sql 中使用 ViewModel 属性
【发布时间】:2019-01-22 12:21:10
【问题描述】:

enumautomapper 存在问题

我有一个使用enum 作为属性之一的EF 数据集和一个视图模型,用于在带有enumToString 的网格上显示此属性以显示enum 的文本值

我正在使用AutoMapper 将 EF 类映射到 ViewModel 类,但是在加载数据时出现错误

System.NotSupportedException: '指定的类型成员 LINQ to Entities 不支持“DataTableTypeDisplay”。仅有的 初始化器、实体成员和实体导航属性是 支持。

我已尝试将忽略选项添加到 DataTableTypeDisplay 的配置中,但没有任何更改。

如果我删除此属性,但 Grid 只显示 int 的值 Enum,则效果很好

使用AutoMapper v7.0.1

类文件

public class ClassName
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ClassNameId { get; set; }

    public DataTableType DataTableType { get; set; }
…

查看模型

public class ClassNameGridViewModel : ChangeControlBase
{
    public Guid? ClassNameId { get; set; }

    public DataTableType DataTableType { get; set; } = DataTableType.None;

    [NotMapped]
    public string DataTableTypeDisplay
    {
        get { return DataTableType.ToString(); }
    }
…

AutoMapper 配置

public ClassNameGridViewModelProfile()
    {
        CreateMap<NS.ClassName, NS.ClassNameGridViewModel>();

        CreateMap<NS.ClassNameGridViewModel, NS.ClassName>();
    }

枚举

public enum DataTableType
{
    None = 0,
    Type1 = 1,
    Type2 = 2,
    Type3 = 3,
}

【问题讨论】:

    标签: c# asp.net-mvc entity-framework enums automapper


    【解决方案1】:

    AFAIK Automapper 不使用[NotMapped] 属性。它确实具有[IgnoreMap] 属性,但这意味着将 Automapper 引用添加到受影响的实体。或者,当您为 Entity -> VM 配置映射时:

    Mapper.CreateMap<ClassName, ClassNameGridViewModel>()
    .ForMember(vm => vm.DataTableTypeDisplay, opts => opts.Ignore())
    

    【讨论】:

    • 谢谢,我已经添加了这个,但我仍然得到同样的错误。还尝试了 [IgnoreMap] 属性,它似乎忽略了我的映射配置。
    • 您能否添加引发错误的确切 EF linq 表达式?
    • 好的,谢谢你指出我正确的方向,这不是 Automapper 错误。我查看了 SQL 和它的罚款,我也在使用 Telerik DataSource 这似乎对查询也有影响,我会做更多的挖掘并找到问题
    【解决方案2】:

    问题原来不是按预期工作的 Automapper,我还使用 Telerik DataSource 请求,它向基础查询添加排序、过滤器分组和分页,因为 SQL 表中不存在 DataTableTypeDisplay 列这是导致错误。

    我目前的解决方案是将enum 移动到数据库中的一个表中,并通过导航属性进行映射。

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多