簡體   English   中英

關閉MSSQL服務器中的數據庫連接

[英]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服務器連接到同一個數據庫,直到我之前它才會關閉:

  • 關閉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.

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