将导航属性与实体框架相结合
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;
并对其他属性执行类似操作。
【讨论】:
以上是关于将导航属性与实体框架相结合的主要内容,如果未能解决你的问题,请参考以下文章
将 SwiftUI 中的文本与背景属性相结合会产生错误,因为无法将“某些视图”类型的值转换为预期的参数类型“文本”?