0

有很多关于工作单元模式的信息,但其中大部分是不同的。

我了解到我应该为每个请求拥有自己的实体上下文。我应该使用工作单元模式来实现这个目标(从这里开始。实体框架和连接池

所以我已经以这种方式实现了它:http ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-模式中的-an-asp-net-mvc-应用程序

但是只有那个实现,每个请求我没有一个上下文,所有请求都共享相同的上下文,对吗?

然后我找到了这个链接: http: //www.mindscapehq.com/blog/index.php/2008/05/12/using-the-unit-of-work-per-request-pattern-in-aspnet-mvc/

但现在我记得我不应该session / HttpContext.Items 变量中保存上下文。那正确吗?

我在哪里可以找到最好的实施教程?

4

1 回答 1

2

我遵循您的第二个链接中给出的模式。您没有在具有该模式的所有请求中共享上下文。看一下示例代码:

public class StudentController : Controller
{
    private IStudentRepository studentRepository;

    public StudentController()
    {
        this.studentRepository = new StudentRepository(new SchoolContext());
    }
}

对于Student控制器的每个请求,都会创建该类的一个新实例。在该类的构造函数中,它正在创建一个具有新上下文的新存储库实例。这意味着上下文将仅在该请求的生命周期内存在。

编辑:这里有一点澄清:

也许在这个过程中倒退会有助于澄清。从访问者在您的控制器中执行某些操作开始。ASP.NET 将创建控制器类的实例。当它创建该实例时,您将在内存中拥有一个上下文,该上下文将在该请求的持续时间内存在,并且不再存在

这很好,因为您正在控制器中执行工作。举个例子,用户要求更新他们的个人资料。您将如何使用实体框架 (EF) 来处理它?首先,您将使用您的存储库并获取他们的用户记录。您的上下文现在知道该对象。然后您获取访问者提供的数据(假设他们想要更改他们的电话号码)并使用新值更新您的 EF 对象。上下文会跟踪这些更改,因此在您的操作结束时,您可以调用.Save()并对您的数据库进行适当的更新。

于 2013-04-16T15:19:07.233 回答