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 回答