[英]Close database connection in MSSQL server
我正在編寫集成測試來驗證我的存儲庫中的行為。 我遇到的問題是我想從每個測試的干凈數據庫開始。 我設法通過編寫SetUp如下:
[SetUp]
public void SetUp()
{
_applicationContext = new TestApplicationContext();
_applicationContext.Database.Connection.Close();
_applicationContext.Database.Delete();
_applicationContext.Database.Create();
_tenantRepository = new TenantRepository(_applicationContext);
_userRepository = new UserRepository(_applicationContext);
}
TestApplicationContext
將數據庫名稱設置為TestDatabase
。
這工作正常,直到我想檢查實際數據庫的測試結果。 然后我從MSSQL服務器連接到同一個數據庫,直到我之前它才會關閉:
我找到的唯一方法是通過SQL命令。 也許是因為我對MSSQL的n00b知識,但我有點希望有一個“關閉連接”按鈕/選項。
如何從MSSQL服務器關閉與數據庫的連接? 或者,有沒有辦法可以通過C#以編程方式執行此操作?
更新:
也許我不太清楚。 但是在打開MSSQL並查看表的內容后,測試SetUp失敗了。 這是因為MSSQL還創建了與TestDatabase的連接,並且我的集成測試無法關閉該連接。 所以我正在尋找一個解決方案,允許我關閉我從MSSQL服務器創建的連接。
您將連接釋放回連接池,而不是實際關閉它。 不是為每個測試創建/刪除數據庫,而是在清理中開始設置和回滾中的新事務。 這樣,不會對您的數據庫進行任何更改,並且您的測試將始終從干凈狀態開始。
此外,因為您正在測試實時數據庫,我不會將您的測試稱為“單元”測試。 單元測試沒有任何外部依賴性。
您可以解決連接問題,而不是刪除並重新創建整個數據庫,只需刪除並重新創建所選(或所有表)。
您可以創建一個小腳本,以一種您不需要對表名進行硬編碼的方式為您完成: http : //www.apexure.com/blog/2010/07/29/delete-all-tables-在-SQL服務器數據庫/
另外,Julia Lerman在她的書“Programming Entity Framework:Code First”中以更成熟的形式提到了這種方法,並將其作為自定義數據庫初始化程序合並:
除了編寫自己的自定義初始值設定項外,您還可以找到其他人創建的初始值設定項。 其中一個例子可以在EFCodeFirst.CreateTablesOnly NuGet包中找到。 此初始化程序將允許您在現有數據庫中刪除和創建表,而不是刪除和創建實際數據庫本身。 如果您的目標是沒有權限刪除或創建整個數據庫的托管數據庫,這將非常有用。
可靠地獲取數據庫的獨占鎖定的唯一方法是使用SINGLE_USER WITH ROLLBACK IMMEDIATE
技術。 我建議您創建一個空狀態的數據庫快照,並每次還原到該快照。 那會更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.