2

我有一个数据库模型来存储运动结果。有一个 Team 表和一个 Fixture 表:

在此处输入图像描述

目前,如您所见,我有以下导航属性:

  • AwayFixtures / HomeFixtures
  • AwayHistoricMatches / HomeHistoricMatches
  • AwayLiveScores / HomeLiveScores

我想,而不是结合每个集合的两个集合并具有以下内容:

  • 夹具
  • 历史赛事
  • 实时比分

我仍然需要在数据库中保持分离,因为我仍然想知道一支球队是在主场还是客场比赛。最终目标是在 Web API odata 提要中公开它,因此我的最终 url 将是:

  • /odata/Teams(45)/夹具
  • /odata/Teams(45)/HistoricMatches
  • /odata/Teams(45)/LiveScores

我已经为这个问题做了一些谷歌搜索,但没有发现任何让我相信这是不可能的东西,或者我正在搜索错误的关键字“实体组合导航属性”。有没有办法更改导航属性以匹配上述内容?

编辑: 或者,有没有一种方法可以只将自定义导航属性添加到我的 Web API,然后返回组合的 2 个集合,同时保持 EDM 相同?

4

1 回答 1

2

好问题。重要的是要意识到您的 OData Web API 可以具有与您在数据库中使用的数据模型不同的数据模型。因此,例如,您可以定义一个名为 Fixture 的实体类型,将其添加到您的 OData 模型中,然后让 FixturesController 的 Get() 实现如下所示:

public IEnumerable<Fixture> Get(ODataQueryOptions queryOptions)
{
    List<Fixture> fixtures = new List<Fixture>();
    var homeFixtures = queryOptions.ApplyTo(_db.HomeFixtures) as IQueryable<HomeFixture>;
    var awayFixtures = queryOptions.ApplyTo(_db.AwayFixtures) as IQueryable<AwayFixture>;
    fixtures.AddRange(ConvertToFixtures(homeFixtures));
    fixtures.AddRange(ConvertToFixtures(awayFixtures));
    return fixtures;
}

并为其他属性做类似的事情。

于 2013-05-31T06:27:03.573 回答