将导航属性与实体框架相结合

时间:2013-05-30 23:10:05

标签: entity-framework asp.net-web-api odata

我有一个存储体育赛事结果的数据库模型。有一个Team表和一个Fixture表:

enter image description here

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

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

我想,而是将每个集合合并为一起,并具有以下内容:

  • 赛程
  • HistoricMatches
  • 比分

我仍然需要在数据库中保持分离,因为我仍然想知道一个团队是在家里还是在外面玩。最终目的是在Web API odata feed中公开它,所以我的最终网址将是:

  • /的OData /组(45)/赛程
  • /的OData /组(45)/ HistoricMatches
  • /的OData /组(45)/实况比分

我已经为这个问题做了一些谷歌搜索,并没有提出任何问题导致我认为这是不可能的,或者我正在寻找错误的关键词“实体组合导航属性”。有没有办法更改导航属性以匹配上述内容?

修改 或者,有没有办法可以只将自定义导航属性添加到我的Web API,然后返回2个集合,同时保持EDM相同?

1 个答案:

答案 0 :(得分: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;
}

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