带有 EF 和自动映射器的 OData:无法比较..'。仅支持原始类型、枚举类型和实体类型
Posted
技术标签:
【中文标题】带有 EF 和自动映射器的 OData:无法比较..\'。仅支持原始类型、枚举类型和实体类型【英文标题】: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>();
);
现在如果我通过
浏览 URLhttp://localhost:34354/odata/Order?$expand=OrderLines
它在下面抱怨错误
无法比较“c4codata.OrderDTO”类型的“成员“OrderLines”。仅支持原始类型、枚举类型和实体类型。
我做错了什么?这困扰了我好几天,请帮忙!!
我已将 repo 上传到https://github.com/ninithepug/odata
【问题讨论】:
【参考方案1】:问题是,您首先使用数据库。所有的 AM 测试都首先使用代码,这才是真正有效的。所以你也应该这样做。 Working gist.
【讨论】:
谢谢,我不能先使用代码,因为数据库模型不能改变。我会测试你分享的代码谢谢你的帮助!! 也看到这似乎与我的确切问题但是仍然不起作用..github.com/AutoMapper/AutoMapper/issues/925 没有人说要更改数据库。您可以编写实体,使其与现有数据库匹配。 好的,我运行它正在工作的代码,但是如果我将相同的代码放入 OData (v3) 中,它会返回相同的错误..所以它没有帮助.. 如果您可以将其简化为仅涉及 AM 的问题,我会看看。我真的不在乎其余的。以上是关于带有 EF 和自动映射器的 OData:无法比较..'。仅支持原始类型、枚举类型和实体类型的主要内容,如果未能解决你的问题,请参考以下文章