Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 管理实体连接生命周期_C#_.net_Asp.net_Entity Framework_Entityconnection - Fatal编程技术网

C# 管理实体连接生命周期

C# 管理实体连接生命周期,c#,.net,asp.net,entity-framework,entityconnection,C#,.net,Asp.net,Entity Framework,Entityconnection,在管理EntityContext生命周期方面存在许多问题 e、 g 我得出的结论是,实体上下文应该被视为一个工作单元,因此不能重用。太好了 但是在做一些加速数据库访问的研究时,我偶然发现了这篇博文 文章认为,与其他框架相比,EFs的性能较差,这通常是因为每次需要新的EntityContext对象时都会创建EntityConnection对象 为了测试这一点,我在Global.asax.cs应用程序_Start()中手动创建了一个静态EntityConnection 然后,我使用语句将所有上下文

在管理EntityContext生命周期方面存在许多问题

e、 g

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

但是在做一些加速数据库访问的研究时,我偶然发现了这篇博文

文章认为,与其他框架相比,EFs的性能较差,这通常是因为每次需要新的EntityContext对象时都会创建EntityConnection对象

为了测试这一点,我在Global.asax.cs应用程序_Start()中手动创建了一个静态EntityConnection

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

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}
据我所知,这似乎加快了速度,没有任何错误

但这安全吗

使用应用程序范围的静态实体连接是否会引入竞争条件

致以最良好的祝愿, 凯文 <> LI>

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

  • 在我的项目中,我对EF上下文进行了每个WebRequest的维护,也就是说,上下文对象从web请求的开始到结束都是静态的&该请求中的所有操作都使用相同的EF上下文。这大大加快了我的处理速度,而没有出现上述问题

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


    嗯。

    。我认为您可以将它们集中在一起,但不能对Web应用程序使用单一的静态连接,因为将涉及许多线程。

    这可能会引发一场圣战。;)您好,谢谢,但我的EntityContext不是应用程序范围。它使用的实体连接是。我使用EntityContext作为一个“工作单元”,即基本上每个访问都有一个新的上下文。谢谢。我确信这不会那么容易,但我很想弄清楚是否有人为了提高性能而共享连接。因为那篇MSDN博客文章说明了这一点。如果不在.NET4中重新测试,我不会改变任何东西。这可能已经得到解决。