[英]How can I close connection string object in Entity Framework
今天,當我從下面的代碼運行我的應用程序時出現異常
dbContext.ManageTasks.Where(x => x.IsDeleted == false).ToList();
錯誤是
超時已過。 在從池中獲取連接之前超時時間已過。 這可能是因為所有池連接都在使用中並且達到了最大池大小。
我從這個討論中得到了一個解決方案: 如何解決 ASP.NET 和 SQL Server 之間的連接池問題?
解決方案是:如果我關閉當前的連接字符串對象,那么這個錯誤就會消失。
SqlConnection myConnection = new SqlConnection(ConnectionString);
myConnection.Open();
// some code
myConnection.Close();
上面的 ADO.NET 代碼,而不是實體框架。
如何關閉實體框架中的連接字符串對象?
我有點不確定您為什么需要使用“SqlConnection”。 DbContext 是一個一次性類。 我發現最安全的清理方法是使用“使用”標簽。 例如
using(DbContext _context = new MyContext())
{
\\Your Work here
}
當它到達實際上關閉您的連接的結束大括號時,這將自動調用 _context.Dispose()。
替代方案是:
DbContext _context = new MyContext();
_context.ManageTasks.Where(x => x.IsDeleted == false).ToList();
_context.Dispose();
這確實意味着如果發生異常,可能會錯過 dispose 調用。
希望這可以幫助。
為了處理事務范圍並幫助處理對象,您可能需要查看存儲庫模式和 unitOfWork 模式。 或者兩者兼而有之。
除此之外,我知道使用 DependencyInjection 來處理大量連接。 我只是確保它們是 Scoped(每個 Web 請求):)
您可能在類中的某處保留了一個全局變量dbContext
。 你不應該那樣做!
您可以使用DbContext
實現的IDisposable
接口並使用using
語句。 只要需要,就初始化一個新的DbContext
:
using (YourDbContext dbContext = ...)
{
// do some actions
}
// context will be closed
使用using
的好處是它會關閉和處理,即使里面的代碼會拋出異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.