4

我有這樣的:延遲加載用的DbContext

Post post = GetPost(postID); 

if (post.User.UserID == userID) 
    return true; 

和的getPost():

public Post GetPost(int postID) 
{ 
    var ctx = new ForumContextContainer(); 
    var post = (from p in _ctx.PostSet 
       where p.PostID == postID 
       select p).FirstOrDefault(); 
    return post; 
} 

而且帖子內容:

public partial class Post 
{ 
    public int PostID { get; set; } 
    public string Text { get; set; } 
    public System.DateTime Created { get; set; } 
    public Nullable<int> Like { get; set; } 
    public Nullable<int> Dislike { get; set; } 

    public User User { get; set; } 
    public Thread Thread { get; set; } 
    public ICollection<Attachment> Attachment { get; set; } 
    public ICollection<Reported> Reported { get; set; } 
    public ICollection<Tag> Tag { get; set; } 
} 

現在,正如你可能猜到我想比較如果用戶創建後與否。問題是,用戶在這裏爲空。 我的問題是,我必須明確地加載的用戶,每一個我稱之爲的getPost時間()或我可以做的另一種方式。

問,因爲,讓我們說這樣每次線程加載在線程每一個崗位,每一個用戶瀏覽線程..嗯,你可以看到數學。

回答

8

如果您將導航屬性設置爲虛擬,並且您將在整個處理過程中使您的上下文保持活動狀態,EF將在您首次訪問時加載導航屬性 - 這就是延遲加載。如果你不把性虛擬或者如果你計劃在GetPost方法來關閉上下文(上下文是一次性的!),你必須明確地加載要通過Include方法使用每一個導航屬性。