1

Entity Framework 4 の学習を始めたばかりで、ピボット テーブルがどのように混在するかについて少し混乱しています。適切な例: ビデオ ゲームのレビュー サイトを PHP 5/Kohana フレームワークから ASP.NET MVC 2 に移行しています。多対多の関係をマッピングするピボット テーブルがいくつかあります。例:

ビデオ ゲームは、いくつかのプラットフォームで利用できます (たとえば、グランド セフト オート シリーズは、XBox 360、プレイステーション 3、PC、PSP、さらにはニンテンドー DS でも利用できます)。そして当然のことながら、各プラットフォームにはゲームのライブラリがあります。したがって、ゲームとプラットフォームの間のピボットとして機能する GamesPlatforms という名前のテーブルがあります。

ゲームプラットフォーム

  • GamesPlatformsID -- int、主キー、ID
  • GameID -- ゲーム テーブルからの int、外部キー
  • PlatofrmID -- int、Platforms テーブルからの外部キー

これがどのように EF4 ナビゲーション プロパティに変換されるか、そして従来の JOIN ではなく LINQ クエリをどのように記述できるかを理解するのに苦労しています。次のような単純なものですか?

using(var context = MyEntities();)
{
    var gamePlatformCount = (from gpc in context.Games
                            where gpc.GamesPlatforms.Platforms.Name == "XBox 360"
                            select gpc).Count();
}

??

基本的に、私が見たチュートリアルのどれも多対多の関係を扱っていないので、私が正しい方向に進んでいるかどうかを知りたいだけです。

4

2 に答える 2

2

ゲームとプラットフォームの間のリンクをエンティティとして明示的にモデル化する場合は、次のようにクエリを定義できます。

        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();
于 2010-09-01T21:39:51.883 に答える
1

ほとんど。次のようなものが必要です。

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();
}
于 2010-09-01T21:39:11.230 に答える