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 个选项:
~/Location!Customer/
~/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://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太长看不懂...
对于我的示例,我有两个 类
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 个选项:
~/Location!Customer/
~/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://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太长看不懂...