【问题标题】:OData Endpoint doesn't return all properties of the EntityOData 端点不返回实体的所有属性
【发布时间】:2018-12-28 09:51:36
【问题描述】:

ASP.NET CORE 2 Web API - OData v4

我的项目启用了以下端点的配置,并且应该返回实体 - 客户的 AccountDetails

https://my.website/odata/accountdetails/{accountNumber}

我的项目有 2 个实体,如下所示,

实体 1:资产负债表

public class BalanceSheet{
    public int TotalBalance { get; set; }
    public int AvaialableBalance { get; set; }
}

实体 2:AccountDetails

public class AccountDetails{
    public int Name{ get; set; }
    public int AccountNumber { get; set; }
    public BalanceSheet Balance { get; set;}
}

我的 OData 配置如下。

app.UseMvc(routebuilder =>
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

    builder.EntitySet<AccountDetails>("AccountDetails");

    routebuilder.MapODataServiceRoute("ODataCommon", "odata",   builder.GetEdmModel());
});

当我查询 API 以获取帐户详细信息时,理想情况下,我应该返回 3 个属性,它们是 - 名称、帐户编号和余额。

但我得到了姓名和帐号,但没有得到余额?

是不是我做错了什么?

【问题讨论】:

    标签: c# odata asp.net-core-2.0 asp.net-core-webapi odata-v4


    【解决方案1】:

    我的项目有 2 个实体

    您似乎只有一个实体AccountDetails,而另一个BalanceSheet 是一个复杂类型。您已在 Edm 模型中注册了 AccountDetails 实体,并且似乎缺少复杂类型注册。

    在 Edm 模型中添加复杂类型应该可以解决问题。

    builder.ComplexType<BalanceSheet>();
    

    如果不行,分享控制器代码和$元数据

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,通过添加 complexType 解决了它:

      builder.ComplexType();

      另外我发现应该使用不同的查询来获取 UI 上的复杂类型

      而不是调用 http://url/api/AccountDetails?$select=name,accountNumber,balance 应该使用另一个 url: http://url/api/AccountDetails?$select=name,accountNumber,balance&$expand=balance

      你只能通过 $expand 看到复杂的属性

      在此处查看详细信息:https://stackoverflow.com/a/55476645/2050539

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-12
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 2022-01-26
        • 2012-07-06
        相关资源
        最近更新 更多