2013-05-30 118 views
2

我有一个数据库模型来存储运动结果。还有一队表和夹具表:将导航属性与实体框架相结合

enter image description here

此刻,你可以看到,我有以下的导航属性:

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

我想,而不是两个集合结合起来,每有以下几点:

  • HistoricMatches

    • 灯具
    • 实况比分

    我仍然需要保持在分离因为我仍然想知道一支球队是在家里还是在家里玩。最终的目标是将其暴露在Web API OData源,所以我的最终网址是:

    • /的OData /支(45)/灯具
    • /的OData /支(45)/ HistoricMatches
    • /odata /团队(45)/ LiveScores

    我已经做了一些谷歌搜索这个问题,并没有把什么东西导致我相信这是不可能的或我正在寻找错误的关键词“组合导航属性的实体”。有没有办法改变导航属性以符合上述?

    编辑: 或者说,是有办法,我可以自定义导航属性只是我的Web API添加,然后返回2分集,同时保持EDM相同的组合?

  • 回答

    2

    伟大的问题。意识到您的OData Web API可以与您在数据库中使用的数据模型有不同的数据模型,这一点很重要。所以你可以举例来说要做的就是定义一个名为灯具实体类型,添加到您的OData模型,然后让你获取(实施)为FixturesController这个样子:

    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; 
    } 
    

    ,做类似的东西其他属性。