Поделиться через


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

Том Дайкстра

Скачивание начального проекта

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

Обзор

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

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

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

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

В этом разделе вы добавите столбец даты рождения в базовый 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. На панели инструментов "Публикация веб-одного щелчка" щелкните профиль публикации "Тест" и нажмите кнопку "Опубликовать веб-сайт". (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)

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

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

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

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

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

  6. На панели инструментов " Публикация веб-одного щелчка" щелкните профиль публикации рабочей среды и нажмите кнопку "Опубликовать веб-сайт".

  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. Щелкните правой кнопкой мыши таблицу "Пользователи" и выберите пункт "Конструктор представлений".

    Конструктор представлений SSOX

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

    Добавление столбца примечаний

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

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

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

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

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

  3. Скопируйте следующую разметку в MainContent Content элемент (последний из 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 (добавьте учетную запись/UserInfo.aspx на URL-адрес домашней страницы), чтобы убедиться, что обновление успешно развернуто. Вам потребуется войти, введя администратора и devpwd.

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

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

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

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

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

Итоги

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

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

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

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