【问题标题】:OData with EF and automapper: Cannot compare..'. Only primitive types, enumeration types and entity types are supported带有 EF 和自动映射器的 OData:无法比较..'。仅支持原始类型、枚举类型和实体类型
【发布时间】:2018-02-20 04:09:53
【问题描述】:

有一个带有 ef 6.1.3 和 automapper 6.1.1 的 Odata v3 端点。

数据模型,

  • Orderlines,一对多的订单

    公共部分类订单 { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 公共秩序() { this.OrderLines = new HashSet(); }

    public System.Guid OrderID { get; set; }
    public string OrderPlacedBy { get; set; }
    public Nullable<System.DateTime> PlacedTime { get; set; }
    
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<OrderLine> OrderLines { get; set; }
    

    }

  • 订单行

    公共部分类 OrderLine { 公共 System.Guid OrderLineID { 获取;放; } 公共 Nullable OrderID { 获取;放; } 公共可空量{获取;放; }

        public virtual Order Order { get; set; }
    }
    

AutoMapper 代码,

cfg =>
            {
                cfg.AllowNullDestinationValues = true;
                cfg.AllowNullCollections = true;
                cfg.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
                cfg.DestinationMemberNamingConvention = new PascalCaseNamingConvention();
                cfg.RecognizeDestinationPrefixes("DTO_");

                cfg.CreateMap<Order, OrderDTO>()
                    .ForMember(d=>d.OrderLines,o=>o.AllowNull())
                    .ForMember(d=>d.OrderLines,o=>o.MapFrom(s=>s.OrderLines));
                cfg.CreateMap<OrderLine, OrderLineDTO>();
            });

现在如果我通过

浏览 URL

http://localhost:34354/odata/Order?$expand=OrderLines

它在下面抱怨错误

无法比较“c4codata.OrderDTO”类型的“成员“OrderLines”。仅支持原始类型、枚举类型和实体类型。

我做错了什么?这困扰了我好几天,请帮忙!!

我已将 repo 上传到https://github.com/ninithepug/odata

【问题讨论】:

    标签: automapper


    【解决方案1】:

    问题是,您首先使用数据库。所有的 AM 测试都首先使用代码,这才是真正有效的。所以你也应该这样做。 Working gist.

    【讨论】:

    • 谢谢,我不能先使用代码,因为数据库模型不能改变。我会测试你分享的代码谢谢你的帮助!!
    • 也看到这似乎与我的确切问题但是仍然不起作用..github.com/AutoMapper/AutoMapper/issues/925
    • 没有人说要更改数据库。您可以编写实体,使其与现有数据库匹配。
    • 好的,我运行它正在工作的代码,但是如果我将相同的代码放入 OData (v3) 中,它会返回相同的错误..所以它没有帮助..
    • 如果您可以将其简化为仅涉及 AM 的问题,我会看看。我真的不在乎其余的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多