0

我将 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 不可访问。这种架构的最佳实践是什么?为什么导航属性不持久?

4

1 回答 1

0

您的导航属性导致错误的原因是您在加载导航属性之前处理了上下文。

如果您考虑正在发生的事情:

  • 您正在打开一个数据库连接,并检索一个人员对象。
  • 然后,您关闭此连接。
  • 接下来,你问那个人反对,你的雇主是谁?它尝试返回您的数据库,但连接不存在并且中断。

您要么需要使用include急切地为您的人加载 Employer ,从您的上下文来看,这将context.Persons.Include(p => p.employments)很难说,因为您没有发布该代码。

或者,让您的数据库连接保持更长时间。访问该人的雇主信息似乎都将在同一个单元中处理,因此也许您应该考虑在整个方法中保持工作单元的活力。

于 2012-09-27T14:13:19.770 回答