如何使用 odata $expand 显示多对多关系的数据?

How to display data from many-to-many relationship using odata $expand?

我有几个数据库表,其中一些表具有多对多关系。我正在使用 webapi 和 odata 从数据库中获取数据。例如:

TableA ---> TableB (one to one)
TableA ---> TableC (one to one)
TableA ---> TableD (one to one)
TableE --> TableD ---> Table F (many-to-many)

现在,因为我使用的是 odata 控制器,所以我可以使用 /odata/Claims?$expand=TableA,TableB,TableC,TableD 来显示预期的数据。但是,我无法使用来自 TableD 的 ID 显示来自 TableETableF 的数据。我不确定要向您展示什么代码,但这是 GET 方法

   [EnableQuery(AllowedQueryOptions =  System.Web.OData.Query.AllowedQueryOptions.All)]
    public IQueryable<TableA> Get()
    {
        return dbContext.DeniedClaims.AsQueryable();               
    }

有什么方法可以使用 odata 在同一个查询中显示来自 TableE 和 TableF 的数据?

这是我执行 $expand

时数据的显示方式
{
  "@odata.context":"http://localhost:58891/odata/$metadata#TableA","value":[
    {
      // some values,
      "Id": 1, // blah blah
      "TableB":{
          "Id":1,"FirstName":"Test","LastName":"Test",
      },"TableC":{
        "Id":1,
      },"TableD":{
        "Id":1,"TableERefId":1,"TableFRefId":1
      }
    }
}

注意 TableD,而不是只显示 TableERefIdTableFRefId,我想查看 TableETableF 中的值。

我该怎么做?

如果我对你的数据模型的理解是正确的,你想要进行超过 1 级深度的内联扩展。假设 TableD 实体类型具有名为 TableETableF 的导航属性,将 nested $expand option 附加到 TableD,如下所示:

$expand=TableB,TableC,TableD($expand=TableE,TableF)