我使用EF与存储库模式和工作单元。我正在拉一个具有内部对象就业的对象。 以下是如何构造类:
class Person
{
Employment employments;
}
class Employment
{
int ID {get;set;}
string Employer {get;set;}
}
启用了延迟加载。 以下是我如何获取Person对象:
Person p;
using (unitOfWork = new UnitOfWork())
{
p=unitOfWork.PersonRep.Single(s => s.Id== Id);
}
return p;
在此代码之外,无法访问p.employments。这种架构的最佳实践是什么?为什么导航属性不会持续存在?
答案 0 :(得分:0)
导航属性导致错误的原因是因为您在导航属性加载之前处置了上下文。
如果你想一想发生了什么:
您需要使用include急切地为您的人员加载雇主,在您的上下文中,它会像context.Persons.Include(p => p.employments)
这样很难说,因为您没有发布该代码。
或者,让您的数据库连接保持更长时间。访问该人的雇主信息似乎都将在同一单元中处理,因此您可以考虑在整个方法中保持您的工作单元存活。