Entity framework oData$在派生类型上展开

Entity framework oData$在派生类型上展开,entity-framework,asp.net-web-api,odata,Entity Framework,Asp.net Web Api,Odata,我在odata查询中遇到了获取派生类型的难题: {{Url}}/odata/resource?$expand=derivedType 请参见下面给出的选项,如 ~/People/of类型('Employee')(41)/经理或~/People!没有工作的员工 带有EF6的Asp.NETWebAPI2是否支持此功能?问什么?那篇博文中的信息已经过时了。官方OData规范可在以下网址获得: 在ODataV4中,您可以通过将派生类型的完全限定名附加到资源URI路径来实现。例如,GEThttp://ho

我在odata查询中遇到了获取派生类型的难题:

{{Url}}/odata/resource?$expand=derivedType

请参见下面给出的选项,如 ~/People/of类型('Employee')(41)/经理或~/People!没有工作的员工


带有EF6的Asp.NETWebAPI2是否支持此功能?问什么?

那篇博文中的信息已经过时了。官方OData规范可在以下网址获得:

在ODataV4中,您可以通过将派生类型的完全限定名附加到资源URI路径来实现。例如,
GEThttp://host/Employees/MyService.Manager
将检索同时也是经理的员工子集(假设经理是从员工类型派生的)。最后一个路径段中的前缀
MyService
是定义
Manager
类型的OData命名空间


$expand
子句中将派生类型的完全限定名附加到属性名称后,还可以按派生类型进行筛选。例如,
GEThttp://host/Companies('Acme')?$expand=Employees/MyService.Manager
将检索名为Acme的公司,并将所有经理内联展开。

这是OData 4.0约定文档中的一个练习:

标识资源集合的任何资源路径或路径表达式 实体或复杂类型实例可以附加路径段 包含从声明的类型派生的类型的限定名 收藏的一部分。结果将仅限于 派生类型,并且可能为空。任何资源路径或路径表达式 可以附加标识单个实体或复杂类型实例 具有包含派生类型的限定名称的路径段 从已标识资源的声明类型。如果用于 资源路径,并且标识的资源不是 派生类型,请求将导致404未找到响应。如果 在作为布尔表达式一部分的路径表达式中使用 类型转换将计算为null。示例30:实体集限制为 VipCustomer实例


示例31:实体 仅限于VipCustomer实例,如果 密钥为1的客户不是VipCustomer


示例32:强制转换 将复杂属性地址转换为其派生类型DetailedAddress,然后 获取派生类型的属性


示例33:带有类型转换的筛选器表达式;将计算为null 对于所有非VipCustomer实例,因此只返回 VIP客户

?$filter=Model.VipCustomer/vipPromotionProductSordered gt的百分比 80
示例34:仅当单个相关客户是 Model.VipCustomer的实例。仅适用于许多关系 Model.VipCustomer实例将内联

?$expand=Customer/Model.vipccustomer


已尝试$expand=resource/namespace.resourceDerivedType。我收到了400个错误的请求。{“error”:{“code”:“,”message”:“找到了一个遍历多个导航属性的路径。请重新表述查询,使每个扩展路径只包含类型段和导航属性。”}}}我已经回答了您关于使用派生类型的查询格式的问题。如果您有特定的问题,请发布另一个带有代码示例的问题。