を使用してデータベースを更新していますDacServices
。ただし、新しい制約が追加されて制約違反が発生する場合があり、列のデータが有効であることを確認するために移行スクリプトを作成する必要があります。
ただしDacServices.Deploy
、ScriptNewConstraintValidation
オプションが true の場合と新しい制約エラーがあるため、DacServices によって行われた変更をロールバックする方法がわかりません。
AlwaysOn 可用性を使用しているため、バックアップ/復元の実行は非常に困難です。以下は、私が試みたが成功しなかった1つの方法です。
var dacServices = new DacServices(dbConnection.ConnectionString);
var deploymentOptions = new DacDeployOptions
{
CreateNewDatabase = createNewDatabase,
ScriptDatabaseCompatibility = false,
ScriptDatabaseCollation = false,
IgnoreUserSettingsObjects = true,
DropPermissionsNotInSource = false,
DropRoleMembersNotInSource = false,
IgnorePermissions = true,
IgnoreRoleMembership = true,
GenerateSmartDefaults = true,
IncludeTransactionalScripts = true,
ScriptNewConstraintValidation = true
};
Microsoft.SqlServer.Dac.DacPackage dacPackage = DacPackage.Load(dacPath);
Console.WriteLine("Deploying DacPac");
CancellationTokenSource tokenSource = new CancellationTokenSource();
try
{
dacServices.Deploy(dacPackage, databaseName, true, deploymentOptions, tokenSource.Token);
}
catch(Exception)
{
tokenSource.Cancel();
}