我应该在asp.net网站上保存我的上下文实例?

时间:2011-07-10 05:26:54

标签: asp.net-mvc database entity-framework

我正在构建一个asp网站并使用Entity框架作为ORM。

我应该将实体框架工作实例放在哪里?

目前在每个控制器中我都有一个私有成员,如下所示:

MyDBEntities mDbContext = new MyDBEntities();

这意味着在每个请求中,都会创建一个新的控制器,然后创建一个新的mDbContext。此外,我在成员资格提供程序中mDbContext(以检查用户是否是成员)和角色提供程序(以检查其角色)和某些绑定程序(以获取视图无法提供的某些数据),意思是我可以为每个页面请求创建3-4个与db的连接?

我可能做错了什么,但是做正确的方法是什么?

3 个答案:

答案 0 :(得分:1)

至于控制器,这是完全可以的。 MVC的许多IoC示例都建议将构造函数注入到MVC控制器中,这几乎是相同的。

会员/角色提供者中的一个上下文实例不是一个好主意,因为他们是单身人士。上下文迟早会被多个线程解决。那里你应该有每个方法调用的上下文。

此处有更多详情:What could cause many data access exceptions using EF code first in a custom RoleProvider?

答案 1 :(得分:0)

将数据库逻辑放在数据库类(例如存储库)中。

在该存储库中,您可以使用多个方法(getallcustomerssavecustomer等),这些方法都创建一个新的MyDBEntities对象,并带有using语句:

using (MyDBEntities mDbContext = new MyDBEntities())
{
   //your db code here

}

据我所知,创建MyDBEntities对象只不过是在ADO.Net中创建一个新连接,所以它是一个轻量级的操作。

您可以从控制器调用存储库方法。

如果你似乎经常从控制器使用一种方法(即每次请求多次),你可以考虑缓存。

答案 2 :(得分:0)

按照Unit Of Work模式,demo web app here