2016-05-12 2 views
0

Я пытаюсь выполнить развертывание с использованием 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

Спасибо очень много.

ответ

0

Это был простой способ - моим SSDT (инструментам данных SQL-сервера) было необходимо обновление. После обновления до последней версии (11.1.50717.0) настройка начала работать.