2

提供されたパッケージをデータベースにデプロイする場合:

DacServices service = new DacServices(connectionString);
DacPackage dacpac = DacPackage.Load(dacpacPath);
DacDeployOptions ddo = new DacDeployOptions();
ddo.BlockOnPossibleDataLoss = false;
service.Deploy(dacpac, dbName, true, ddo);

キャンセル トークンを使用してキャンセルするにはどうすればよいでしょうか。これにより、展開操作全体がロールバックされますか?

キャンセル トークンを作成して Deploy メソッドに渡すことはできますが、その後どうすればキャンセルできるのでしょうか? また、操作全体をロールバックしますか?

CancellationToken token = new CancellationToken();
service.Deploy(dacpac, dbName, true, ddo, token);
4

1 に答える 1

2

DacDeployOptions.IncludeTransactionalScriptsフラグを「true」に設定すると、モデルのデプロイ手順がトランザクションにラップされます。デプロイが失敗するかキャンセルされた場合、エンジンはこれらの手順をロールバックしようとします。デプロイ前/デプロイ後のスクリプト ステップはトランザクションに配置されないため、これらを使用する場合は、自分でトランザクション対応にする必要があることに注意してください。これは、a) エンジンがそれらを解析しない、またはその内容を理解しようとしない、b) トランザクションと互換性のないコードが含まれている可能性があるため、エンジンがトランザクション性を強制しようとしないためです。

実際にキャンセルを呼び出すには、CancellationTokenSourceを使用できます。コードは次のようになると思います。

DacServices service = new DacServices(connectionString);
DacPackage dacpac = DacPackage.Load(dacpacPath);
DacDeployOptions ddo = new DacDeployOptions();
ddo.BlockOnPossibleDataLoss = false;
ddo.IncludeTransactionalScripts = true;
CancellationTokenSource tokenSource = new CancellationTokenSource();
service.Deploy(dacpac, dbName, true, ddo, tokenSource.Token);
tokenSource.Cancel();
于 2014-03-03T19:00:09.490 に答える