2011-10-07 105 views
0

我正嘗試在現有數據庫中使用實體框架。使用代碼,第一種方法,我已經得到了以下自動創建的模型(其中包括 - 我試圖縮短代碼才能到問題的實質):實體框架數據優先:自動加載相關數據

namespace Fidd.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Movies 
    { 
     public Movies() 
     { 
      ... 
      this.MoviesPictures = new HashSet<MoviesPictures>(); 
      ... 
     } 

     public int MovieID { get; set; } 
     public string MovieName { get; set; } 
     ... 

     public virtual ICollection<MoviesPictures> MoviesPictures { get; set; } 
    } 
} 

所以基本上這是一個電影和電影圖片之間的1-n關係。我仍然在學習EF的過程。

如果我想加載與

var movie = from m in dbContext.Movies 
      where m.MovieID == 5 
      select m; 

一個電影我如何才能被自動加載的MoviesPictures收藏?無論是渴望還是懶惰。

UPDATE:其實是有一個額外的關聯關係:

電影1..1 MoviesPictures n..1圖片

的MoviesPictures模型的定義是這樣的:

public partial class MoviesPictures 
{ 
    public int MoviePictureID { get; set; } 
    public int MoviePictureMovieID { get; set; } 
    public int MoviePicturePictureID { get; set; } 
    public System.DateTime MoviePictureAddDatetime { get; set; } 
    public bool MoviePictureRemoved { get; set; } 
    public Nullable<System.DateTime> MoviePictureRemovedDatetime { get; set; } 

    public virtual Movies Movies { get; set; } 
    public virtual Pictures Pictures { get; set; } 
} 

有什麼這種方式來加速這個2.在相同的查詢內關聯層?我試圖這樣做:

var model = from m in db.Movies.Include("MoviesPictures").Include("Pictures") 
      where m.MovieID == id 
      select m 

哪些不起作用 - 我得到一個運行時異常,圖片沒有在電影中的導航屬性定義。當然有道理。我只是不知道如何指定查詢,否則。

另一件讓我擔心的事情......上面的Include()語句在編譯期間沒有發現任何錯誤。有沒有辦法以類型安全的方式指定它?

/卡斯滕

回答

2

你會想這樣做:

var movie = from m in dbContext.Movies.Include("MoviesPictures") 
      where m.MovieId == 5 
      select m; 

這是急切地從 「MoviesPictures」 表中讀取記錄。您可以在這裏閱讀更多信息:http://msdn.microsoft.com/en-us/magazine/cc507640.aspx。此外,如果你谷歌「實體框架包括」,你可能會發現更多的信息。

UPDATE

你也許可以做到.Include("MoviesPictures.Pictures")這取決於你如何有事情成立。如果沒有,那麼你想要做一些連接;這裏有一個很好的博客文章:http://weblogs.asp.net/salimfayad/archive/2008/07/09/linq-to-entities-join-queries.aspx加入。

關於在「類型安全」這是「包含」相關記錄的唯一方法。正如我所提到的,您可以使用連接,這可能會更接近於「類型安全」。

+0

感謝大猩猩。這正是我所需要的。我已經用兩個後續更新了這個問題,希望你也可以回答。 –

+0

我只是想出了這樣一個很好的做法:從dbContext.Movies.Include中的m(「MoviesPictures.Pictures」) - 但我的類型安全急切加載的其他問題仍然是:-) –

相關問題