はい。ただし、必要ない場合があります。
私は現在、wbx911/Tim Post の回答にある方法でデータベースにアタッチするプロセスを使用しています。ただし、元のデータベースのコピー (たとえば、プロジェクト/ソリューション ビルドによって作成されたコピー) をアタッチする場合は、それらをデタッチする必要はありません。データベースに接続が接続されていない場合、次のテスト実行でオーバーライドされます。
データベースのコピーが多数アタッチされている場合、またはアタッチされているすべてをクリーンアップしたくない場合は、localDb インスタンスのマスター データベースにアタッチされた次のようなストアド プロシージャを使用できます (例:私は個人的に使用します):
CREATE PROCEDURE [dbo].[DettachTestDatabases]
AS
BEGIN
DECLARE @imax INT,
@i INT
DECLARE @Name VARCHAR(255)
DECLARE @DbsToDrop TABLE(RowID INT IDENTITY ( 1 , 1 ),
name VARCHAR(255)
)
INSERT @DbsToDrop
SELECT [name]
FROM [master].[sys].[databases]
WHERE
--Remove all local dbs with *SomeText*.mdf or SomeOtherTextin name
(name like '%SomeText%.mdf' or name like '%SomeOtherText%')
-- Exclude VS test dbs (add more as required...)
and (name not like '%TESTS.%');
SET @imax = @@ROWCOUNT
SET @i = 1
WHILE (@i <= @imax)
BEGIN
SELECT @Name = name
FROM @DbsToDrop
WHERE RowID = @i
EXEC master.dbo.sp_detach_db @dbname = @Name;
PRINT 'Dettatched ' + @Name;
SET @i = @i + 1;
END --while
END --sp
GO
命名規則を使用して、削除するデータベースを決定しています (したがって、like ステートメント)。Visual Studioは、デタッチしたくないテスト結果を管理するために、いくつかのデータベース(または少なくともVSに属していると思います)をアタッチします(したがって、「好きではない」条件)。名前でデタッチする master.dbo.sp_detach_db があるため、実際には名前を参照するだけで済みますが、localdb の名前はワイルドな場合があるため、ルックアップが役立ちます。
必要性を感じていないため (上書きが正常に機能しているため)、テストの最後にこれをまだ自動化していませんが、必要なときにいつでも SSMS で実行できます。ただし、必要がある場合は、クリーンアップ コードから SP への呼び出しを管理するだけで済みます。
データベースのアタッチは、やや高価なプロセスです。データベースを再接続する代わりに、変数データを削除してテーブルを再シードしてデータベースを一貫した状態にするクリーンアップ方法/ SPを選択しました。これは非常に高速です。
改善点があればぜひ教えていただきたいです!