我有这个:
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()或我可以用另一种方式。
问问因为,假设每次为线程中的每个帖子加载线程,为每个用户浏览线程做这个。好吧,你可以看到数学。
答案 0 :(得分:8)
如果您将导航属性设置为虚拟,并且您将在整个处理过程中保持上下文活动,EF将在您第一次访问它时加载导航属性 - 即延迟加载。如果您不使虚拟属性或计划在GetPost
方法中关闭上下文(上下文是一次性的!),则必须通过Include
方法显式加载要使用的每个导航属性。