Я пытаюсь выполнить развертывание с помощью DacFx, и мне нужно поместить базу данных в однопользовательский режим, чтобы никто (кроме контекста обновления dac) не мог обновить базу данных.
_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) в скрипте, что означает, что мне придется массировать его перед фактическим выполнением) .
Вопрос о связи: публикация dacpac в однопользовательском режиме с использованием Microsoft.SqlServer.Dac.DacServices
Большое спасибо.