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

от Tom Dykstra)

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

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

Обзор

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

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

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

Развертывание обновления базы данных с помощью 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 откройте инструкторы. aspx и добавьте новое поле шаблона, чтобы отобразить дату рождения. Добавьте его между ними для даты найма и назначения Office:

    <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. Запустите страницу инструкторов в рабочей среде, чтобы убедиться, что обновление успешно развернуто.

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

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

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

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

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

  2. Разверните узел (LocalDB) \v11.0, разверните узел базы данных, разверните узел ASPNET-ContosoUniversity (не ASPNET-ContosoUniversity-произв.), а затем разверните узел таблицы.

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

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

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

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

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

    Добавление столбца комментариев

  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. Войдите в систему с учетными данными администратора ( девпвд) и добавьте к пользователю комментарии, чтобы убедиться, что страница работает правильно.

    Страница UserInfo

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

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

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

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

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

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

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

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

    1. Щелкните настроить обновления базы данных.
    2. В диалоговом окне Настройка обновлений базы данных снимите флажки для GRANT. SQL и АСПнет-Дата-дев. SQL.
    3. Щелкните Закрыть.
  6. Перейдите на вкладку Предварительный просмотр .

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

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

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

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

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

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

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

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

    Не забудьте отключить дополнительные сценарии. Единственная разница по сравнению с профилем тестирования заключается в том, что в промежуточном и рабочем профилях будет отключен только один скрипт, так как они были настроены для запуска только АСПнет-прод-Дата. SQL.

    Учетные данные для промежуточного хранения и рабочей среды — Admin и продпвд.

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

Сводка

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

Страница инструкторов с ДеньРождения

Страница UserInfo

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