OData:找不到以继承类型命名的 属性

OData: Could not find a property named on inherited type

对于我的示例,我有两个 类

public class Location
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Address3 { get; set; }
    public string Town { get; set; }
    public string County { get; set; }
    public string CountryCode { get; set; }
}

public class Customer : Location
{
    public string BankAccountNumber { get; set; }
    public string BankSortCode { get; set; }
}

在我的查询中,我返回了所有位置和客户。

http://localhost:80/odata/Location?select=Id,Name,Town

但是,如果我尝试 select 客户中的任何内容(编辑:所以我想要所有位置,但如果该位置也是客户,则需要银行帐号),我会收到错误消息。

http://localhost:80/odata/Location?select=Id,Name,Town,BankAccountNumber

"The query specified in the URI is not valid. Could not find a property named 'BankAccountNumber' on type 'MyNamespace.Location'."

有什么方法可以 select 继承类型中的字段,而无需全部 select 吗?谢谢

根据OData.org,查询派生类型有 2 个选项:

  1. ~/Location!Customer/
  2. ~/Location/OfType('Customer')

因此您的查询应如下所示:

http://localhost:80/odata/Location!Customer?select=Id,Name,Town,BankAccountNumber

http://localhost:80/odata/Location/OfType('Customer')?select=Id,Name,Town,BankAccountNumber

/编辑: 千里指出,上述博文指的是 OData V2。在 Odata4 中,继承类型按以下语法访问:

http://host/service/BaseType/Model.SubType

参考:http://docs.oasis-open.org/odata/odata/v4.0/os/part2-url-conventions/odata-v4.0-os-part2-url-conventions.html#_Toc372793786

您不仅应该添加类型名称,还应该添加类型的名称空间。 例如: http://services.odata.org/TripPinWebApiService/People('russellwhyte')/Trips(1001)/PlanItems/ODataSamples.WebApiService.Models.Flight?$select=StartsAt

Flight 类型继承自 PlanItem 类型。 ODataSamples.WebApiService.Models 是命名空间。

更详细的派生类型信息,可以参考http://www.odata.org/getting-started/advanced-tutorial/ with some live example if you find the spec太长看不懂...