在新保存的对象上延迟加载不起作用(从保存它们的上下文中获取它们时)

时间:2011-09-23 19:31:14

标签: entity-framework entity-framework-4.1

我有这个班级

public class Comment
{      
    public long Id { get; set; }
    public string Body { get; set; }
    public long OwnerId { get; set; }
    public virtual Account Owner { get; set; }
    public DateTime CreationDate { get; set; }
}

问题是虚拟财产所有者是我在执行时获得null object reference exception

comment.Owner.Name

在保存对象后立即调用此对象(来自同一个DbContext实例) 使用新的上下文将起作用

有人对此有所了解吗?

1 个答案:

答案 0 :(得分:18)

那是因为你用构造函数创建了Comment。这意味着Comment实例未被代理,并且它不能使用延迟加载。您必须使用Create上的DbSet方法来获取Comment的代理实例:

var comment = context.Comments.Create();
// fill comment
context.Comments.Add(comment);
context.SaveChanges();
string name = comment.Owner.Name; // Now it should work because comment instance is proxied