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

Posted

技术标签:

【中文标题】将导航属性与实体框架相结合【英文标题】: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 不变?

【问题讨论】:

【参考方案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;

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

【讨论】:

以上是关于将导航属性与实体框架相结合的主要内容,如果未能解决你的问题,请参考以下文章

将 ASP.Net MVC 与 WebForms 相结合

如何将黄瓜报告实用程序与空手道框架相结合?

将 SwiftUI 中的文本与背景属性相结合会产生错误,因为无法将“某些视图”类型的值转换为预期的参数类型“文本”?

BottomNavigationView结合ViewPager

OKR如何与项目管理相结合

Powershell:如何结合 2 个命令的输出将磁盘字母与磁盘 MediaType 相关联?