【问题标题】:Combining navigation properties with Entity Framework将导航属性与实体框架相结合
【发布时间】:2013-05-30 23:10:04
【问题描述】:

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

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

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

我想将这两个集合合并为每个集合并具有以下内容:

  • 夹具
  • 历史匹配
  • 实时比分

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

  • /odata/Teams(45)/Fixtures
  • /odata/Teams(45)/HistoricMatches
  • /odata/Teams(45)/LiveScores

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

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

【问题讨论】:

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


    【解决方案1】:

    很好的问题。认识到您的 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;
    }
    

    并对其他属性执行类似操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多