2010-09-01 143 views
1

我剛剛開始學習實體框架4,並對數據透視表如何輸入混合有點困惑。案例:我將一個視頻遊戲評論網站從PHP 5/Kohana框架遷移到ASP.NET MVC 2.我有幾個數據透視表來映射我擁有的多對多關係。例如:實體框架4 - 數據透視表和導航屬性

視頻遊戲可用於多個平臺(例如,俠盜獵車手系列,可在XBox 360,PlayStation 3,PC,PSP甚至Nintendo DS上使用)。當然,每個平臺都有一個遊戲庫。所以,我有一個表命名GamesPlatforms充當之間,還有,遊戲和平臺的支點:

GamePlatforms

  • GamesPlatformsID - 整型,主鍵,身份
  • 遊戲ID - INT,國外INT,從平臺表

我只是有一個很難看到如何將被翻譯成EF4導航親外鍵 - 從遊戲表

  • PlatofrmID關鍵並且反過來說,我可以寫LINQ查詢而不是傳統的JOIN。它是這樣簡單:

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

    ?? ??

    基本上,我只想知道我是否在正確的軌道上,因爲我見過的教程都沒有處理多對多的關係。

  • 回答

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