【发布时间】:2011-07-05 09:30:18
【问题描述】:
我正在尝试在 EF4 上下文中启用延迟加载。
试图加载数据的代码是:
using (IUnitOfWork uw = new EFUnitOfWork())
{
foreach (Document doc in uw.Documents.All)
{
Console.WriteLine("Name: {0} Description: {1} Category: {2}", doc.Name, doc.Description, doc.DocumentCategory.Name);
}
}
我正在试验存储库和工作单元模式,但据我了解,下面的命令应该可以工作。
ctx.ContextOptions.LazyLoadingEnabled = true;
我遇到的问题是在访问 doc.DocumentCategory.Name 时,我得到了 NullReferenceException。
为什么不延迟加载这些数据?
如果我已加载 DocumentCategories,则 DocumentCategory 属性已解析。
我的 Document 类定义如下:
public class Document
{
public Document()
{
}
public Document(int id)
{
Id = id;
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual int DocumentCategoryId { get; set; }
public virtual bool Deleted { get; set; }
public DocumentCategory DocumentCategory { get; set; }
public override string ToString()
{
return Name;
}
}
【问题讨论】:
-
所有文档都有 DocumentCategory 吗?只是想知道 LazyLoading 确实尝试检索给定 Document 的 DocumentCategory 但没有找到,因此返回 null 并导致您的 NullReferenceException。
-
是的,DocumentCategoryId是数据库中不可为空的字段,表之间存在外键。
-
导航属性是否标记为虚拟?你能告诉我们你的 Document 类的定义吗?
-
我已经发布了我的 Document 类,DocumentCategory 属性未声明为虚拟的。
标签: c# .net sql-server entity-framework