我有一个相当大的 SQL 支持的 ASP.NET 项目,它使用实体框架与数据库进行交互。
我的问题是,我应该创建一个由每个类/方法中的 edmx/designer 文件定义的 ObjectContext 的实例 - 还是 - 将它包装在一个静态类周围,该类将实例化 onload 并基本上通过一个实例处理所有请求。
我将有多个用户使用 ObjectContext 来读取和更新数据库,并发性和线程安全是我最关心的问题。
编辑: 此代码最终将在 IIS 中运行并且容易被回收。
我有一个相当大的 SQL 支持的 ASP.NET 项目,它使用实体框架与数据库进行交互。
我的问题是,我应该创建一个由每个类/方法中的 edmx/designer 文件定义的 ObjectContext 的实例 - 还是 - 将它包装在一个静态类周围,该类将实例化 onload 并基本上通过一个实例处理所有请求。
我将有多个用户使用 ObjectContext 来读取和更新数据库,并发性和线程安全是我最关心的问题。
编辑: 此代码最终将在 IIS 中运行并且容易被回收。
在大多数情况下,每个请求只需要一个上下文。只有特殊场景才能在每个请求中需要更多上下文,但绝不会在请求之间共享上下文。
ObjectContext 类不是线程安全的。在多线程场景下,无法保证 ObjectContext 中数据对象的完整性。
来源:http: //msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx
因此,最好的方法是对每个 HTTP 请求使用 ObjectContext。创建一个RepositoryBase
类,每个存储库都在RepositoryBase
定义通用 CRUD 操作(最好是通用的)中扩展,并仅null
在请求时创建一个新实例。