Rav*_*tal 6 c# entity-framework
我正在使用WebApi和AngularJS开发应用程序.我花了一些时间申请后得到这个例外.我在这个应用程序中使用EntityFramework.
"Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."
堆栈跟踪
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
? at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
Run Code Online (Sandbox Code Playgroud)
小智 10
关闭数据库连接(这非常重要).
SqlConnection myConnection = new SqlConnection(ConnectionString);
try
{
conn.Open();
someCall (myConnection);
}
finally
{
myConnection.Close();
}
Run Code Online (Sandbox Code Playgroud)
要么
using (SqlConnection myConnection = new SqlConnection(ConnectionString))
{
myConnection.Open();
someCall(myConnection);
}
Run Code Online (Sandbox Code Playgroud)
检查连接到数据库的用户数以及查询的超时时间.如果您有很长时间执行查询,请检查.
也许,重复的问题:
如何解决ASP.NET和SQL Server之间的连接池问题?
小智 5
请尝试以下操作
始终在finally块中关闭连接
增加池大小,就像在连接字符串中一样
string connectionString = "Data Source=localhost; Initial Catalog=Northwind;Integrated Security=SSPI; Min Pool Size=10; Max Pool Size=100";
或者
根本不使用池化
string connectionString = "Data Source=localhost; Initial Catalog=Northwind;Integrated Security=SSPI; Pooling=false;";
小智 5
我刚刚经历了同样的问题。我最终使用了这样的模式,这似乎解决了这个问题:
using (SqlConnection con = new SqlConnection(strCon))
{
using (SqlCommand cmd = new SqlCommand(strCmdText, con))
{
con.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
//do stuff;
dr.Close();
}
}
con.Close();
}
Run Code Online (Sandbox Code Playgroud)
这似乎解决了我的问题。DataReader.Close()是钉子做到了这一点。看来微软应该改变他们的建议,因为我在他们的网站上发现了建议不要使用该try { } finally { con.Close(); }模式的建议。我没有明确地尝试这个,因为该模式在我们的整个数据库层中相当普遍,并且想要找到更接近的东西。
我希望这可以帮助别人。