Проект базы данных Visual Studio и SQL Azure

Я действительно борюсь с лучшим подходом к управлению базой данных SQL Azure, которая основана на проекте Visual Studio 2010 Database Project. Я полагал, что было бы достаточно просто использовать VSDBCMD для создания скриптов diff для обновлений, а затем просто запустить с SQL Azure в SSMS. Тем не менее, я получаю страшное "Не удалось определить поставщика схемы базы данных. Развертывание не может продолжаться". ошибка.

В этот момент я просто предполагаю, что SQL Azure не поддерживает что-то в VSDBCMD или наоборот, и я смотрю на другие подходы. Здесь подход, который я сейчас рассматриваю:

  • Script база данных SQL Azure из SSMS с использованием параметров ядра базы данных Azure.
  • Создайте локальную базу данных tempory из script на шаге 1.
  • Используйте VSDBCMD для создания моей дельта script для локальной базы данных с шага 2.
  • Просмотрите/измените script с шага 3.
  • Запустите script с шага 3/4 с SQL Azure в SSMS.

Хорошо, плохо? Любые другие идеи?

EDIT: я обновился до Visual Studio 2010 с пакетом обновления 1 (SP1) и обнаружил, что в Microsoft.Data.Schema.Sql.dll: SqlAzureDatabaseSchemaProvider появился новый поставщик схемы базы данных. Однако я не могу определить, как на самом деле использовать этого плохого мальчика. Теперь, когда я пытаюсь использовать VSDBCMD script для базы данных Azure, я получаю:

Поставщик схемы исходной базы данных Sql100DatabaseSchemaProvider не может быть переведен провайдеру SqlAzureDatabaseSchemaProvider. Развертывание не может продолжаться.

Я также попытался использовать поставщика Sql90 с тем же результатом. Я даже вручную отредактировал файл dbproj и изменил свойство DSP на SqlAzureDatabaseSchemaProvider. Когда я перезагружаю проект, я получаю:

Поставщик схемы базы данных должен предоставить реализацию DataGenerationServices.

Кто-нибудь пробовал это с VS 2010 SP1?

Ответ 1

Вы можете использовать Мастер миграции SQL Azure и играть с ним. Возможно, вы можете получить скрипты и отредактировать их по своему усмотрению. Просто идея.

Ответ 2

Просмотрите страницу свойств проекта базы данных. Он должен отображать раскрывающийся список, содержащий различные доступные поставщики для проекта. Если вы выберете поставщика Azure, вы сможете развернуть проект как часть вашего приложения Azure.

Ответ 3

Необходим простой инструмент командной строки, который заменяет неверные операторы SQL Azure:

    private const string STARTPLACEHOLDER = "AZURESCRIPTSTARTPLACEHOLDER";

    public static void Do(string fileName)
    {
        // Read the original file
        StringBuilder script = new StringBuilder();
        using (StreamReader reader = new StreamReader(fileName))
        {
            script.Append(reader.ReadToEnd());
        }

        // Remove everything before the start placeholder
        int startPlaceHolder = script.ToString().IndexOf(STARTPLACEHOLDER, 0);
        if (startPlaceHolder > 0)
        {
            script.Remove(0, startPlaceHolder + STARTPLACEHOLDER.Length);
        }

        // Remove WITH clause
        script.Replace("WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF)", string.Empty);

        // Create azure compatible output file
        using (StreamWriter writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + "_Azure" + Path.GetExtension(fileName))))
        {
            writer.Write(script.ToString());
        }
    }