Ленивая загрузка с DbContext - PullRequest
4 голосов
/ 14 мая 2011

У меня есть это:

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 (), или я могу сделать это другим способом.

Запрашиваемая, потому что, скажем, делать это каждый раз, когда поток загружается для каждого сообщениянить, для каждого пользователя просматривают нить .. Ну, вы можете увидеть математику.

1 Ответ

8 голосов
/ 14 мая 2011

Если вы сделаете ваши навигационные свойства виртуальными и будете поддерживать ваш контекст в течение всего периода обработки, EF загрузит навигационное свойство при первом обращении к нему - это ленивая загрузка. Если вы не делаете свойства виртуальными или планируете закрыть контекст в методе GetPost (контекст одноразовый!), Вы должны явно загрузить каждое свойство навигации, которое вы хотите использовать, методом Include.

...