EFDBContext配置不关闭连接我使用的是EF6.1.0我在DBEntites下有一个自定义的DBContex对象publicpartialclassDbEntities:DbContext{publicDbEntities():base("name=DbEntities"){////Configuration.LazyLoadingEnabled=true;////Configuration.ProxyCreationEnabled=false;}////我添加了所有实体,如下所示////publicvirtualIDbSetCCodes{get;set;我对上下文对象使用以下操作(varcontext=newDbEntities()){varentitySet=context.Set();varres=entitySet.Where(predicate).ToList();如果(上下文.Database.Connection.State==ConnectionState.Open){context.Database.Connection.Close();}返回资源;但是在处理上下文对象之后,我仍然可以看到一个活动的数据库连接。在连接状态条件中,我可以看到连接已关闭(连接从未建立)。我使用以下查询查看SQL上的连接。selectdb_name(dbid),count(*)'connectionscount'frommaster..sysprocesseswherespid>50andspid!=@@spidgroupbydb_name(dbid)orderbycount(*)desc在下面的语句中,sql的连接数增加了。但即使在处理后它也从未停止过。(我的意思是在使用块后,它应该关闭连接)。varres=entitySet.Where(predicate).ToList();任何帮助将不胜感激。正如评论中指出的那样,原因确实是.NET执行的连接池。出于性能原因,.NET为您在应用程序中使用的每个连接字符串维护一个连接池(因为打开和关闭连接通常在性能方面代价高昂)。该池具有特定的最小和最大大小(由MinPoolSize和MaxPoolSize连接字符串参数控制)。当您打开一个连接(通过SqlConnection.Open)时-它可能会从池中取出并且不会真正重新打开。当您关闭连接时(也通过处理EF上下文来完成)-连接可能会被放入池中而不是真正关闭。当连接空闲一段时间(大约5分钟)时-它可能会从池中删除。如果您(出于某种原因)想要避免这种情况,您可以将连接字符串的MaxPoolSize设置为0,或者通过SqlConnection.ClearPool或SqlConnection.ClearAllPools显式清除池。以上就是C#学习教程:EFDBContext配置不关闭连接共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
