Я пытаюсь выполнить развертывание с использованием 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);
Результирующий скрипт имеет единый пользовательский набор в начале и множество пользователей, установленных в конце. Есть ли причина, по которой выполнение Deploy неправильно использует параметр DeployDatabaseInSingleUserMode, как и следовало ожидать? В конце дня мне просто нужно убедиться, что во время этого обновления не может произойти обновление базы данных - если есть другой способ (помимо однопользовательского), то я открыт для предложений.
Я также попытался генерировать \ выполнение сценария, но я боюсь, что сценарий может стать слишком большим (плюс есть проблемы с $ (DatabaseName), которые используются в скрипте, что означает, что мне придется массировать его раньше фактически выполняя его).
связь Вопрос: Publish dacpac in single user mode using Microsoft.SqlServer.Dac.DacServices
Спасибо очень много.