簡體   English   中英

如何關閉實體框架中的連接字符串對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM