管理EntityConnection生命周期

.net asp.net c# entityconnection entity-framework

管理EntityContext生命周期有很多问题,

例如, 在LINQ to Entities中实例化上下文

我得出的结论是,实体上下文应该被视为一个工作单元,因此不能重复使用。大。

但是在进行一些加速我的数据库访问的研究时,我遇到了这篇博文...

改善实体框架性能

该帖子称,EF文件表现不佳相对于其他框架往往是由于EntityConnection对象被每次需要一个新的EntityContext对象时创建的。

为了测试这一点,我在Global.asax.cs Application_Start()中手动创建了一个静态EntityConnection。

然后我使用语句将我的所有上下文转换为

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}

到目前为止,到目前为止,这似乎已经加快了一点点没有任何错误。

但这样安全吗?

使用应用程序范围的静态EntityConnection是否会引入竞争条件?

最好的问候,凯文

一般承认的答案

记录EntityConnection不是线程安全的 。我认为你可以集中它们,但你不能为Web应用程序使用单个静态连接,因为会涉及很多线程。


热门答案

  • 如果您的EF上下文是应用程序范围的,请考虑用户A已进行更改(未提交)并且用户B已提交更改,所有更改将提交到数据库,因为用户A和B都使用相同的实例

  • 在我的项目中,我根据EF上下文执行了一次WebRequest - 即。上下文对象从Web请求的开始到结束都是静态的,并且该请求中的所有操作都使用相同的EF上下文。这显着加快了我的处理速度而没有上述问题。

实现此目的的一种方法是使用DI容器(我使用Unity)来管理EF上下文的生命周期。每个Web请求生命周期管理器不是在Unity中开箱即用的,但是有大量的文章显示了如何做到这一点。

HTH。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因