【问题标题】:The complex type 'MyData.AssetReading' refers to the entity type 'MyData.Asset' through the property 'Asset'复杂类型“MyData.AssetReading”通过属性“Asset”引用实体类型“MyData.Asset”
【发布时间】:2015-03-05 06:43:49
【问题描述】:

查看设置 Web API odata 并尝试将数据从我们的 edmx 公开给它。问题是,每次我向 OdataConventionBuilder 添加实体时,我都会在加载时收到一条令人讨厌的错误消息:

The complex type 'MyData.AssetReading' refers to the entity type 'MyData.Asset' through the property 'Asset'

似乎在 edmx 中定义的关系正在轰炸 webapi odata 关于复杂类型。关于如何解决这个问题的任何想法,因为 edmx 非常庞大,并且几乎不可能对其进行重新调整。是否需要在 Builder.EntitySet 或 MapOdataRoute 方法上设置属性?

【问题讨论】:

    标签: entity-framework asp.net-web-api odata edmx asp.net-web-api-odata


    【解决方案1】:

    此错误消息是由于当前版本的 Web API for OData V4 不支持在模型中的复杂类型上定义导航属性。 IE。复杂类型还不能引用实体类型。

    此 GitHub 问题跟踪这项工作:https://github.com/OData/WebApi/issues/65。如果您希望它被优先考虑,请通过评论来权衡它。

    【讨论】:

    • Hi Yim 感谢您的回复。这有点烦人,而且 github 上的问题已经接近一年了,所以这并没有给我太多希望。那么我们如何绕过这个错误呢?我无法从 edmx 中删除所有关系,因为旧版 odata.svc 客户端仍在正确使用它们。
    • 你好,丁一,真可惜。无论如何,在定义 MapODataRoute 时,我可以告诉 builder.GetEdmModel 默认忽略这些关系吗?谢谢
    • @Raven 我认为唯一的缓解方法是使用 EdmLib 中的 API 而不是 ODataConventionModelBuilder 构建 EDM 模型并将其传递给 MapODataRoute,以避免自动关系识别。网上没有太多关于如何做到这一点的示例。但这里有一个简单的,你可以从中感受一下:github.com/OData/ODataSamples/tree/master/Components/Edm/…
    • 易丁,根据我对sn-p代码的理解,我们几乎需要通过代码重新构建edm备份?这需要做很多工作,希望能取得更好的胜利
    • @Raven 抱歉。在咨询了几所大学之后,除了使用 EdmLib 没有其他解决方法。
    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多