Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 在.Net中使用dbContext后,连接保持打开状态_C#_.net_Dbcontext_Sqlconnection - Fatal编程技术网

C# 在.Net中使用dbContext后,连接保持打开状态

C# 在.Net中使用dbContext后,连接保持打开状态,c#,.net,dbcontext,sqlconnection,C#,.net,Dbcontext,Sqlconnection,使用后 using (TestDatabaseEntitites ctx = new TestDatabaseEntitites()) { .... } 我希望在使用语句后关闭所有sql连接,我认为这是预期的结果。但事实并非如此。即使在ctx.Dispose()之后 我可以关闭所有打开的连接的唯一方法是clearAllPools方法。 我做错什么了吗? 谢谢。此答案由 DbContext是一个非常轻量级的对象 无论您的DbContext是保持活动状态还是在调用之前实例化它,这都无关紧要

使用后

using (TestDatabaseEntitites ctx = new TestDatabaseEntitites())
{
    ....
}
我希望在使用语句后关闭所有sql连接,我认为这是预期的结果。但事实并非如此。即使在
ctx.Dispose()之后

我可以关闭所有打开的连接的唯一方法是clearAllPools方法。 我做错什么了吗?
谢谢。

此答案由

DbContext是一个非常轻量级的对象

无论您的DbContext是保持活动状态还是在调用之前实例化它,这都无关紧要,因为实际的DB连接只有在您提交更改或枚举查询时才会打开(在这种情况下,它在枚举结束时关闭)


在你的具体情况下。这一点都不重要。

在.Net中的连接池连接通过设计在幕后保持开放。这样做的原因是,打开与数据库的连接通常是一项非常昂贵的操作,需要几秒钟的时间


由于这个原因,关闭连接只会重置它,因此将来打开的
连接只会被传递给旧的重置连接,而不是打开新的连接。

池连接不会物理关闭,它们会被重置。这是连接池的正常操作,如果一切正常,应该不会影响您。您是否在类TestDatabaseEntities中实现了Dispose,并在处理期间或使用sql连接之后关闭了连接?@Jade,事实上,他使用的是
using…
code实现了Dispose<代码>使用
IDisposable