ASP.NET веб-развертывания с помощью Visual Studio: развертывание обновления базы данных

Том Дайкстра (Tom Dykstra)

Скачать начальный проект

В этой серии руководств показано, как развернуть (опубликовать) веб-приложение ASP.NET для Служба приложений Azure веб-приложения или стороннего поставщика услуг размещения с помощью Visual Studio 2012 или Visual Studio 2010. Сведения о серии см. в первом руководстве этой серии.

Общие сведения

В этом руководстве вы внесете изменения в базу данных и соответствующий код, протестируете изменения в Visual Studio, а затем развернете обновление в тестовой, промежуточной и рабочей средах.

Сначала в этом руководстве показано, как обновить базу данных, которая управляется Code First Migrations, а затем — как обновить базу данных с помощью поставщика dbDacFx.

Напоминание. Если при работе с руководством появляется сообщение об ошибке или что-то не работает, обязательно проверка страницу устранения неполадок.

Развертывание обновления базы данных с помощью Code First Migrations

В этом разделе вы добавите столбец даты рождения в базовый Person класс для сущностей Student и Instructor . Затем вы обновите страницу с данными преподавателя, чтобы на ней отображались новые столбцы. Наконец, вы развертываете изменения в тестовой, промежуточной и рабочей среде.

Добавление столбца в таблицу в базе данных приложения

  1. В проекте ContosoUniversity.DAL откройте Файл Person.cs и добавьте следующее свойство в конце Person класса (за ним должны быть две закрывающие фигурные скобки):

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    [Display(Name = "Birth Date")]
    public DateTime? BirthDate { get; set; }
    

    Затем обновите Seed метод так, чтобы он предоставлял значение для нового столбца. Откройте файл Migrations\Configuration.cs и замените блок кода, который начинается var instructors = new List<Instructor> со следующего блока кода, который содержит сведения о дате рождения:

    var instructors = new List<Instructor>
    {
        new Instructor { FirstMidName = "Kim",     LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
        new Instructor { FirstMidName = "Fadi",    LastName = "Fakhouri",    HireDate = DateTime.Parse("2002-07-06"), BirthDate = DateTime.Parse("1960-03-15"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
        new Instructor { FirstMidName = "Roger",   LastName = "Harui",       HireDate = DateTime.Parse("1998-07-01"), BirthDate = DateTime.Parse("1970-01-11"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
        new Instructor { FirstMidName = "Candace", LastName = "Kapoor",      HireDate = DateTime.Parse("2001-01-15"), BirthDate = DateTime.Parse("1975-04-11") },
        new Instructor { FirstMidName = "Roger",   LastName = "Zheng",       HireDate = DateTime.Parse("2004-02-12"), BirthDate = DateTime.Parse("1957-10-12") }
    };
    
  2. Выполните сборку решения, а затем откройте окно Консоль диспетчера пакетов . Убедитесь, что contosoUniversity.DAL по-прежнему выбран в качестве проекта по умолчанию.

  3. В окне Консоль диспетчера пакетов выберите ContosoUniversity.DAL в качестве проекта По умолчанию, а затем введите следующую команду:

    add-migration AddBirthDate
    

    По завершении этой команды Visual Studio открывает файл класса, определяющий новый DbMigration класс, и в Up методе можно увидеть код, создающий новый столбец. Метод Up создает столбец при реализации изменения, а Down метод удаляет столбец при откате изменения.

    AddBirthDate_migration_code

  4. Выполните сборку решения, а затем введите следующую команду в окне консоли диспетчера пакетов (убедитесь, что проект ContosoUniversity.DAL по-прежнему выбран):

    update-database
    

    Entity Framework запускает метод , Up а затем — Seed метод .

Отображение нового столбца на странице "Преподаватели"

  1. В проекте ContosoUniversity откройте Instructors.aspx и добавьте новое поле шаблона для отображения даты рождения. Добавьте его между датами найма и офисными назначениями:

    <asp:TemplateField HeaderText="Hire Date" SortExpression="HireDate">
        <ItemTemplate>
            <asp:Label ID="InstructorHireDateLabel" runat="server" Text='<%# Eval("HireDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorHireDateTextBox" runat="server" Text='<%# Bind("HireDate", "{0:d}") %>' Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Birth Date" SortExpression="BirthDate">
        <ItemTemplate>
            <asp:Label ID="InstructorBirthDateLabel" runat="server" Text='<%# Eval("BirthDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorBirthDateTextBox" runat="server" Text='<%# Bind("BirthDate", "{0:d}") %>'
                Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Office Assignment" SortExpression="OfficeAssignment.Location">
        <ItemTemplate>
            <asp:Label ID="InstructorOfficeLabel" runat="server" Text='<%# Eval("OfficeAssignment.Location") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorOfficeTextBox" runat="server"
                Text='<%# Eval("OfficeAssignment.Location") %>' Width="7em"
                OnInit="InstructorOfficeTextBox_Init"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    

    (Если отступ кода выходит из синхронизации, можно нажать клавиши CTRL+K, а затем CTRL+D, чтобы автоматически переформатировать файл.)

  2. Запустите приложение и щелкните ссылку Преподаватели .

    При загрузке страницы отображается новое поле даты рождения.

    Снимок экрана: страница преподавателей с их именем, датой найма, датой рождения и назначением в офисе.

  3. Закройте браузер.

Развертывание обновления базы данных

  1. В Обозреватель решений выберите проект ContosoUniversity.

  2. На панели инструментов Web One Click Publish (Опубликовать в Интернете одним щелчком мыши) щелкните Тестировать профиль публикации, а затем — Опубликовать веб-сайт. (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)

    Visual Studio развернет обновленное приложение, и браузер откроет домашнюю страницу.

  3. Запустите страницу Преподаватели , чтобы убедиться, что обновление успешно развернуто.

    Когда приложение пытается получить доступ к базе данных для этой страницы, Code First обновляет схему базы данных и запускает Seed метод . При отображении страницы отображается ожидаемый столбец "Дата рождения " с датами.

  4. На панели инструментов Публикация в Интернете одним щелчком щелкните профиль промежуточной публикации, а затем щелкните Опубликовать веб-сайт.

  5. Запустите страницу Преподаватели в промежуточной среде, чтобы убедиться, что обновление успешно развернуто.

  6. На панели инструментов Web One Click Publish щелкните профиль публикации в рабочей среде, а затем щелкните Опубликовать веб-сайт.

  7. Запустите страницу Преподаватели в рабочей среде, чтобы убедиться, что обновление успешно развернуто.

    Для реального обновления рабочего приложения, включающего изменение базы данных, вы также обычно перевести приложение в автономный режим во время развертывания с помощью app_offline.htm, как было показано в предыдущем руководстве.

Развертывание обновления базы данных с помощью поставщика dbDacFx

В этом разделе вы добавите столбец Комментарии в таблицу Пользователь в базе данных членства и создадите страницу, которая позволяет отображать и редактировать комментарии для каждого пользователя. Затем вы развернете изменения в тестовой, промежуточной и рабочей среде.

Добавление столбца в таблицу в базе данных членства

  1. В Visual Studio откройте SQL Server обозреватель объектов.

  2. Разверните узел (localdb)\v11.0, базы данных, aspnet-ContosoUniversity (не aspnet-ContosoUniversity-Prod) и таблицы.

    Если вы не видите (localdb)\v11.0 в узле SQL Server, щелкните правой кнопкой мыши узел SQL Server и выберите команду Добавить SQL Server. В диалоговом окне Подключение к серверу введите (localdb)\v11.0 в качестве имени сервера и нажмите кнопку Подключить.

    Если вы не видите aspnet-ContosoUniversity, запустите проект и выполните вход, используя учетные данные администратора (пароль — devpwd), а затем обновите окно SQL Server обозреватель объектов.

  3. Щелкните правой кнопкой мыши таблицу Пользователи и выберите пункт Просмотреть Designer.

    Designer представления SSOX

  4. В конструкторе добавьте столбец Комментарии и сделайте его nvarchar(128) и допускаемыми значения NULL, а затем нажмите кнопку Обновить.

    Добавление столбца Comments

  5. В поле Предварительная версия Обновления базы данных щелкните Обновить базу данных.

    Предварительная версия Обновления базы данных

Создание страницы для отображения и изменения нового столбца

  1. В Обозреватель решений щелкните правой кнопкой мыши папку Учетная запись в проекте ContosoUniversity, выберите добавить, а затем — Новый элемент.

  2. Создайте новую веб-форму с помощью главной страницы и назовите ее UserInfo.aspx. Примите файл Site.Master по умолчанию в качестве страницы master.

  3. Скопируйте следующую разметку в MainContentContent элемент (последний из 3 Content элементов):

    <h2>User Information</h2>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
            SelectCommand="SELECT UserId, UserName, Comments FROM [Users]" 
            UpdateCommand="UPDATE [Users] SET [UserName] = @UserName, [Comments] = @Comments WHERE [UserId] = @UserId">
            <DeleteParameters>
                <asp:Parameter Name="UserId" Type="Object" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="UserId" Type="Object" />
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="Comments" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="UserId" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
                <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments" />
            </Columns>
        </asp:GridView>
    
  4. Щелкните правой кнопкой мыши страницу UserInfo.aspx и выберите пункт Просмотр в браузере.

  5. Войдите с учетными данными администратора (пароль — devpwd) и добавьте несколько комментариев для пользователя, чтобы убедиться, что страница работает правильно.

    Снимок экрана: страница UserInfo с тестовой учетной записью UserName и тестовой учетной записью Для комментариев.

  6. Закройте браузер.

Развертывание обновления базы данных

Для развертывания с помощью поставщика dbDacFx достаточно выбрать параметр Обновить базу данных в профиле публикации. Однако для первоначального развертывания при использовании этого параметра вы также настроили некоторые дополнительные скрипты SQL: они по-прежнему находятся в профиле, и вам придется запретить их повторное выполнение.

  1. Откройте мастер публикации веб-страницы , щелкнув правой кнопкой мыши проект ContosoUniversity и выбрав команду Опубликовать.

  2. Выберите тестовый профиль.

  3. Перейдите на вкладку Параметры .

  4. В разделе DefaultConnection выберите Обновить базу данных.

  5. Отключите дополнительные скрипты, настроенные для запуска для начального развертывания:

    1. Щелкните Настроить обновления базы данных.
    2. В диалоговом окне Настройка Обновления базы данных снимите флажки проверка рядом с Grant.sql и aspnet-data-dev.sql.
    3. Щелкните Закрыть.
  6. Перейдите на вкладку Предварительный просмотр .

  7. В разделе Базы данных и справа от defaultConnection щелкните ссылку Предварительный просмотр базы данных .

    Предварительная версия базы данных

    В окне предварительного просмотра отображается скрипт, который будет выполняться в целевой базе данных, чтобы эта схема базы данных соответствовала схеме базы данных-источника. Скрипт включает команду ALTER TABLE, которая добавляет новый столбец.

  8. Закройте диалоговое окно Предварительный просмотр базы данных и нажмите кнопку Опубликовать.

    Visual Studio развернет обновленное приложение, и браузер откроет домашнюю страницу.

  9. Запустите страницу UserInfo (добавьте Account/UserInfo.aspx в URL-адрес домашней страницы), чтобы убедиться, что обновление успешно развернуто. Вам придется войти в систему, введя admin и devpwd.

    Данные в таблицах не развертываются по умолчанию, и вы не настроили скрипт развертывания данных для выполнения, поэтому вы не найдете комментарий, добавленный при разработке. Теперь вы можете добавить новый комментарий в промежуточной среде, чтобы убедиться, что изменение было развернуто в базе данных и страница работает правильно.

  10. Выполните ту же процедуру для развертывания в промежуточной и рабочей среде.

    Не забудьте отключить дополнительные скрипты. Единственное отличие от тестового профиля заключается в том, что в промежуточном и рабочем профилях будет отключен только один скрипт, так как они были настроены для запуска только aspnet-prod-data.sql.

    Учетные данные для промежуточной и рабочей среды: admin и prodpwd.

    Для реального обновления рабочего приложения, которое включает изменение базы данных, вы также обычно перевести приложение в автономный режим во время развертывания, отправив app_offline.htm перед публикацией и удалив его после этого, как вы видели в предыдущем руководстве.

Итоги

Теперь вы развернули обновление приложения, включающее изменение базы данных с помощью Code First Migrations и поставщика dbDacFx.

Снимок экрана: страница

Снимок экрана: страница UserInfo с тестом UserName и тестовой учетной записью Comment Tom.

В следующем руководстве показано, как выполнять развертывания с помощью командной строки.