Публикация dacpac в однопользовательском режиме с помощью Microsoft.SqlServer.Dac.DacServices

Я хочу опубликовать dac pac в однопользовательском режиме, чтобы предотвратить ненужные изменения базы данных во время обновления базы данных. Для этого я использовал функцию Deploy в Microsoft.SqlServer.Dac.DacServices.

У этой функции есть аргумент DacDeployOptions options. Я установил DeployDatabaseInSingleUserMode = true в этих опциях. Несмотря на то, что для него установлено значение true, я могу выполнять операции с базой данных во время развертывания dacpac.

Есть ли что-то, что мне не хватает? или есть ли другой способ добиться этого.

Помощь будет оценена!


person Suranga Bandara    schedule 25.06.2015    source источник
comment
Я видел кого-то еще с похожей проблемой - можете ли вы сгенерировать сценарий и посмотреть, есть ли в нем ALTER DATABASE SET SINGLE_USER... вверху?   -  person Ed Elliott    schedule 08.07.2015


Ответы (1)


Какую версию DacFX вы используете? Если это не последняя версия, лучше всего получить последнюю, потому что многие старые не очень хорошо распознают указанные вами параметры.

В качестве альтернативы вы можете сделать это (это то, что я сделал, вместо того, чтобы пытаться заставить DacFX работать правильно.

            ServerConnection connection = new ServerConnection(ServerName);
            Server sqlServer = new Server(connection);
            Database QADatabase = sqlServer.Databases[DatabaseName];
            QADatabase.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
            QADatabase.Alter(TerminationClause.RollbackTransactionsImmediately);
            QADatabase.Refresh();

//DACPAC logic goes here

            QADatabase.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple;
            QADatabase.Alter(TerminationClause.RollbackTransactionsImmediately);
            QADatabase.Refresh();
person BeardOfTriumph    schedule 16.09.2016