gpt4 book ai didi

c# - WebApi OData v4 ComlexType 不能有 EntityType

转载 作者:行者123 更新时间:2023-11-30 17:45:39 26 4
gpt4 key购买 nike

我们使用的是 WebApi OData v3 并且有一对 ComplexType在包含 EntitySet 的实体数据模型中定义的实体实体。

移动到 OData v4 并执行 modelBulder.GetEdmModel() 时步骤我们得到一个 InvalidOperationException “复杂类型‘Foo’通过属性‘Bar’引用实体‘Bar’。”

我查看了规范,看到了一种叫做“抽象实体类型”的东西,它是一种包含实体类型的类型。我在 WebApi OData 代码中没有看到这一点,所以我希望我所要做的就是声明一个 EntityType没有 key ,我得到一把。

没有骰子。制作我的 Foo输入 EntityType (执行 modelBuilder.AddEntityType(typeof(Foo)) 而不是 modelBuilder.AddComplexType(typeof(Foo)) )给出 InvalidOperationException “实体‘Foo’没有定义键”。

是否有一种实体数据模型干净的方式来使用 ComplexTypeEntityType

一个干净但痛苦的解决方案是制作更多本质上是我的实体的类,并将其重命名为 ComplexType 添加到模型中这样我就可以将数据作为复杂类型返回(我将包括从实体类型到匹配的复杂类型的转换运算符,以便它们可以在客户端代码中互换使用)。显然,我不想为了在升级到 OData v4 之前运行良好的东西而经历这种痛苦。

一种更简单但不干净的方法(我已经这样做并且有效)涉及将一个未使用的 key 插入每个现在 EntityType曾经是ComplexType像这样:

/// <summary>
/// Gets or sets the not used "key" property
/// </summary>
/// <remarks>
/// OData v4 seems to have broken the ability of a complex type to hold
/// an entity type. In the spec, there is the notion of an abstract
/// entity type - an entity type that does not have a key. But, it
/// appears v4 doesn't support abstract entity types. Hence, this "key".
/// </remarks>
[Key]
public int NotUsed { get; set; }

最佳答案

这是 ODataLib 尚未为 OData V4 实现的 V4 协议(protocol)的一部分(因此 OData V4 的 Web API 不支持定义此类模型,因为它基于 ODataLib 和其他核心库)。请在 https://github.com/odata/odata.net/issues 上打开一个 Github 问题要求它并帮助跟踪它。

关于c# - WebApi OData v4 ComlexType 不能有 EntityType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com