使用 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() 时,我是否必须显式加载用户,或者我可以以另一种方式执行此操作。

问因为,假设每次为线程中的每个帖子加载线程时,对于每个用户浏览线程,都这样做。好吧,你可以看到数学。

如果将导航属性设置为虚拟,并且在整个处理过程中保持上下文处于活动状态,则 EF 将在首次访问导航属性时加载导航属性 - 这就是延迟加载。如果不使属性成为虚拟属性,或者计划在方法中关闭上下文GetPost上下文(上下文是一次性的!),则必须显式加载要通过Include方法使用的每个导航属性。

相关内容

  • 没有找到相关文章

最新更新