有很多关于工作单元格的信息,但大多数都是不同的。
我已经知道我应该为每个请求提供我自己的实体上下文。我应该使用工作单元模式来实现这一目标(从这里开始。Entity Framework and Connection Pooling)
但是只有那个实现,每个请求我没有一个上下文,所有请求都共享相同的上下文,对吧?
但是现在我记得我应该不在session / HttpContext.Items变量中保存上下文。是吗?
我在哪里可以找到最佳实施教程?
答案 0 :(得分:2)
我遵循second link中给出的模式。您没有使用该模式在所有请求之间共享上下文。看一下示例代码:
public class StudentController : Controller
{
private IStudentRepository studentRepository;
public StudentController()
{
this.studentRepository = new StudentRepository(new SchoolContext());
}
}
对于Student
控制器的每个请求,将创建该类的新实例。在该类的构造函数中,它使用新上下文创建新的存储库实例。这意味着上下文仅在该请求的生命周期内存在。
修改:这里有一点澄清:
也许在这个过程中退步有助于澄清。首先让访问者在您的控制器中执行某些操作。 ASP.NET将创建一个控制器类的实例。当它创建该实例时,您将在内存中有一个上下文在该请求期间生效,不再。
这很好,因为您正在控制器中执行工作。比如用户要求更新其个人资料的示例。你会如何处理实体框架(EF)?首先,您将使用您的存储库并获取其用户记录。您的上下文现在知道该对象。然后,您获取访问者提供的数据(假设他们想要更改他们的电话号码)并使用新值更新您的EF对象。上下文是跟踪这些更改,因此在您的操作结束时,您可以调用.Save()
,并对您的数据库进行适当的更新。