ASP.NET веб-развертывание с помощью Visual Studio: развертывание обновления базы данных
В этой серии учебников показано, как развернуть (опубликовать) веб-приложение ASP.NET для приложение Azure службы веб-приложения или стороннего поставщика услуг размещения с помощью Visual Studio 2012 или Visual Studio 2010. Сведения о серии см . в первом руководстве в серии.
Обзор
В этом руководстве вы вносите изменения в базу данных и связанные с ним коды, тестируйте изменения в Visual Studio, а затем развертываете обновление в тестовых, промежуточных и рабочих средах.
В руководстве сначала показано, как обновить базу данных, управляемую с помощью code First Migrations, а затем узнать, как обновить базу данных с помощью поставщика dbDacFx.
Напоминание. Если вы получаете сообщение об ошибке или что-то не работаете по мере прохождения руководства, обязательно проверьте страницу устранения неполадок.
Развертывание обновления базы данных с помощью первой миграции кода
В этом разделе вы добавите столбец даты рождения в базовый Person
класс для Student
сущностей и Instructor
сущностей. Затем вы обновите страницу, отображающую данные инструктора, чтобы он отображал новый столбец. Наконец, вы развертываете изменения для тестирования, промежуточной и рабочей среды.
Добавление столбца в таблицу в базе данных приложения
В проекте 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") } };
Создайте решение и откройте окно консоли диспетчер пакетов. Убедитесь, что ContosoUniversity.DAL по-прежнему выбран в качестве проекта по умолчанию.
В окне консоли диспетчер пакетов выберите ContosoUniversity.DAL в качестве проекта по умолчанию и введите следующую команду:
add-migration AddBirthDate
По завершении этой команды Visual Studio открывает файл класса, определяющий новый
DbMigration
класс, и в методеUp
можно увидеть код, создающий новый столбец. МетодUp
создает столбец при реализации изменения, аDown
метод удаляет столбец при откате изменения.Создайте решение, а затем введите следующую команду в окне консоли диспетчер пакетов (убедитесь, что проект ContosoUniversity.DAL по-прежнему выбран):
update-database
Entity Framework запускает
Up
метод, а затем запускаетSeed
метод.
Отображение нового столбца на странице "Преподаватели"
В проекте 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, чтобы автоматически переформатировать файл.)
Запустите приложение и щелкните ссылку "Инструкторы ".
Когда страница загружается, вы увидите, что она имеет новое поле даты рождения.
Закройте браузер.
Развертывание обновления базы данных
В Обозреватель решений выберите проект ContosoUniversity.
На панели инструментов "Публикация веб-одного щелчка" щелкните профиль публикации "Тест" и нажмите кнопку "Опубликовать веб-сайт". (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)
Visual Studio развертывает обновленное приложение, а браузер открывается на домашней странице.
Запустите страницу "Инструкторы", чтобы убедиться, что обновление успешно развернуто.
Когда приложение пытается получить доступ к базе данных для этой страницы, code First обновляет схему базы данных и запускает
Seed
метод. При отображении страницы отображается ожидаемый столбец даты рождения с датами в нем.На панели инструментов "Публикация веб-одного щелчка" щелкните профиль промежуточной публикации и нажмите кнопку "Опубликовать веб-сайт".
Запустите страницу "Инструкторы" в промежуточном режиме, чтобы убедиться, что обновление успешно развернуто.
На панели инструментов " Публикация веб-одного щелчка" щелкните профиль публикации рабочей среды и нажмите кнопку "Опубликовать веб-сайт".
Запустите страницу "Инструкторы" в рабочей среде, чтобы убедиться, что обновление успешно развернуто.
Для реального рабочего обновления приложения, включающего изменение базы данных, вы также обычно отключите приложение в автономном режиме во время развертывания с помощью app_offline.htm, как показано в предыдущем руководстве.
Развертывание обновления базы данных с помощью поставщика dbDacFx
В этом разделе вы добавите столбец "Комментарии" в таблицу "Пользователь" в базе данных членства и создадите страницу, которая позволяет отображать и изменять комментарии для каждого пользователя. Затем вы развертываете изменения для тестирования, промежуточной и рабочей среды.
Добавление столбца в таблицу в базе данных членства
В Visual Studio откройте обозреватель объектов SQL Server.
Разверните узел (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 обозреватель объектов.
Щелкните правой кнопкой мыши таблицу "Пользователи" и выберите пункт "Конструктор представлений".
В конструкторе добавьте столбец "Комментарии " и сделайте его nvarchar(128) и null, а затем нажмите кнопку "Обновить".
В поле "Предварительный просмотр обновлений базы данных" нажмите кнопку "Обновить базу данных".
Создание страницы для отображения и изменения нового столбца
В Обозреватель решений щелкните правой кнопкой мыши папку "Учетная запись" в проекте ContosoUniversity, нажмите кнопку "Добавить" и нажмите кнопку "Создать элемент".
Создайте новую веб-форму с помощью главной страницы и назовите ее UserInfo.aspx. Примите файл Site.Master по умолчанию в качестве главной страницы.
Скопируйте следующую разметку в
MainContent
Content
элемент (последний из 3Content
элементов):<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>
Щелкните правой кнопкой мыши страницу UserInfo.aspx и щелкните "Вид" в браузере.
Войдите с помощью учетных данных администратора (пароль devpwd) и добавьте некоторые примечания к пользователю, чтобы убедиться, что страница работает правильно.
Закройте браузер.
Развертывание обновления базы данных
Чтобы развернуть с помощью поставщика dbDacFx, просто необходимо выбрать параметр "Обновить базу данных " в профиле публикации. Однако для первоначального развертывания при использовании этого параметра вы также настроили некоторые дополнительные скрипты SQL для выполнения: они по-прежнему находятся в профиле, и вам придется предотвратить их повторное выполнение.
Откройте мастер публикации веб-сайта, щелкнув правой кнопкой мыши проект ContosoUniversity и нажав кнопку "Опубликовать".
Выберите профиль теста.
Перейдите на вкладку Параметры.
В разделе DefaultConnection выберите "Обновить базу данных".
Отключите дополнительные скрипты, настроенные для запуска для начального развертывания:
- Нажмите кнопку "Настройка обновлений базы данных".
- В диалоговом окне "Настройка обновлений базы данных" снимите флажки рядом с Grant.sql и aspnet-data-dev.sql.
- Нажмите кнопку Закрыть.
Перейдите на вкладку Предварительный просмотр .
В разделе "Базы данных " и справа от DefaultConnection щелкните ссылку "Предварительная версия базы данных ".
В окне предварительного просмотра показан скрипт, который будет выполняться в целевой базе данных, чтобы эта схема базы данных соответствовала схеме исходной базы данных. Скрипт включает команду ALTER TABLE, которая добавляет новый столбец.
Закройте диалоговое окно "Предварительный просмотр базы данных" и нажмите кнопку "Опубликовать".
Visual Studio развертывает обновленное приложение, а браузер открывается на домашней странице.
Запустите страницу UserInfo (добавьте учетную запись/UserInfo.aspx на URL-адрес домашней страницы), чтобы убедиться, что обновление успешно развернуто. Вам потребуется войти, введя администратора и devpwd.
Данные в таблицах не развертываются по умолчанию, и вы не настроили скрипт развертывания данных для запуска, поэтому вы не найдете комментарий, добавленный в разработку. Теперь можно добавить новый комментарий в промежуточном режиме, чтобы убедиться, что изменение было развернуто в базе данных и страница работает правильно.
Выполните ту же процедуру для развертывания в промежуточной и рабочей среде.
Не забудьте отключить дополнительные сценарии. Единственное различие по сравнению с профилем тестирования заключается в том, что вы отключите только один скрипт в профилях промежуточной и рабочей среды, так как они были настроены для запуска только aspnet-prod-data.sql.
Учетные данные для промежуточной и рабочей среды являются администраторами и prodpwd.
Для реального рабочего обновления приложения, включающего изменение базы данных, вы также обычно отключите приложение в автономном режиме во время развертывания, отправив app_offline.htm перед публикацией и удалением, как показано в предыдущем руководстве.
Итоги
Теперь вы развернули обновление приложения, включающее изменение базы данных с помощью первой миграции кода и поставщика dbDacFx.
В следующем руководстве показано, как выполнять развертывания с помощью командной строки.