实体框架4 - 数据透视表和导航属性
问题描述:
我刚刚开始学习实体框架4,并对数据透视表如何输入混合有点困惑。案例:我将一个视频游戏评论网站从PHP 5/Kohana框架迁移到ASP.NET MVC 2.我有几个数据透视表来映射我拥有的多对多关系。例如:实体框架4 - 数据透视表和导航属性
视频游戏可用于多个平台(例如,侠盗猎车手系列,可在XBox 360,PlayStation 3,PC,PSP甚至Nintendo DS上使用)。当然,每个平台都有一个游戏库。所以,我有一个表命名GamesPlatforms充当之间,还有,游戏和平台的支点:
GamePlatforms
- GamesPlatformsID - 整型,主键,身份
- 游戏ID - INT,国外INT,从平台表
我只是有一个很难看到如何将被翻译成EF4导航亲外键 - 从游戏表
using(var context = MyEntities();)
{
var gamePlatformCount = (from gpc in context.Games
where gpc.GamesPlatforms.Platforms.Name == "XBox 360"
select gpc).Count();
}
?? ??
基本上,我只想知道我是否在正确的轨道上,因为我见过的教程都没有处理多对多的关系。
答
差不多。你想要的东西,如:
using(var context = new MyEntities()
{
var gamePlatformCount = (from gpc in context.Games
where gpc.GamesPlatforms.Any(p => p.Platforms.Name == "XBox 360")
select gpc).Count();
}
答
如果你明确地建模为一个实体游戏和平台之间的联系,您可以定义这样的查询:
var q = from g in context.GameSet
from gp in g.GamePlatforms
where gp.Platform.Name == "Xbox 360"
var count = q.Count()
但是,你并不需要很多一对多链接表作为对象模型的显式部分。您可以直接在您的(对象)模型中建立一个多对多关系,并由您的数据库中的链接表作为支持。
因此,在您的实体模型中,您只需拥有游戏和平台,并且它们之间具有多对多的关系。该查询将如下所示:
var q = from g in context.GameSet
from p in g.Platforms
where p.Name == "Xbox 360"
var count = q.Count();