DacFxを使用してデプロイを実行しようとしており、データベースをシングルユーザーモードにして、誰も(dac更新コンテキスト以外)データベースを更新できないようにする必要があります。DacDeployOptions DeployeDatabaseInSingleUserModeが無効になっているようです。
_deployOptions = new DacDeployOptions
{
BlockOnPossibleDataLoss = false,
IncludeCompositeObjects = true,
IncludeTransactionalScripts = true,
DropConstraintsNotInSource = deployConfig.DropConstraintsNotInSource,
DropIndexesNotInSource = deployConfig.DropIndexesNotInSource,
DropDmlTriggersNotInSource = false,
DeployDatabaseInSingleUserMode = true
};
DacServices.Deploy(dacpac, _dbName, true, _deployOptions);
デプロイメントプロセス(確認済み)は、データベースをシングルユーザーモードにしません。ただし、私が使用する場合
var script = DacServices.GenerateDeployScript(dacpac, _dbName, _deployOptions);
結果のスクリプトは、最初に設定された単一のユーザーと、最後に複数のユーザーが設定されています。 DeployDatabaseInSingleUserMode設定を正しく実行しないと、Deployを実行しても期待どおりの理由がありますか?最後に、このアップデート中にデータベースの更新が行われないようにする必要があります。別の方法(シングルユーザー以外)がある場合は、私は提案を公開しています。
私はスクリプトの実行を試みたことがありますが、スクリプトが大きすぎることに恐れています($(DatabaseName)がスクリプトで使用されているという問題があります。それを実際に実行する)。
関係質問: Publish dacpac in single user mode using Microsoft.SqlServer.Dac.DacServices
どうもありがとうございました。