Развертывание веб-приложения ASP.NET с помощью SQL Server Compact с помощью Visual Studio или Visual Web Developer: развертывание обновления базы данных SQL Server — 11 из 12
В этой серии учебников показано, как развернуть (опубликовать) проект веб-приложения ASP.NET, включающий базу данных SQL Server Compact, с помощью версии-кандидата Visual Studio 2012 или Visual Studio Express 2012 RC for Web. Вы также можете использовать Visual Studio 2010 при установке обновления веб-публикации. Общие сведения о серии см. в первом руководстве этой серии.
Руководство по функциям развертывания, появившиеся после выпуска версии-кандидата Visual Studio 2012, развертывание SQL Server выпусков, отличных от SQL Server Compact, и развертывание на веб-сайтах Windows Azure см. в статье ASP.NET веб-развертывание с помощью Visual Studio.
Общие сведения
В этом руководстве показано, как развернуть обновление базы данных в полной базе данных SQL Server. Так как Code First Migrations выполняет всю работу по обновлению базы данных, процесс практически идентичен тому, что вы сделали для SQL Server Compact в учебнике Развертывание обновления базы данных.
Напоминание. Если при работе с руководством появляется сообщение об ошибке или что-то не работает, обязательно проверка страницу устранения неполадок.
Добавление нового столбца в таблицу
В этом разделе учебника вы внесете изменения в базу данных и соответствующие изменения кода, а затем протестируете их в Visual Studio в рамках подготовки к развертыванию в тестовой и рабочей средах. Изменение включает добавление столбца OfficeHours
в Instructor
сущность и отображение новых сведений на веб-странице "Преподаватели ".
В проекте ContosoUniversity.DAL откройте Instructor.cs и добавьте следующее HireDate
свойство между свойствами и Courses
:
[MaxLength(50)]
public string OfficeHours { get; set; }
Обновите класс инициализатора, чтобы он заполнял новый столбец данными тестирования. Откройте 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"), OfficeHours = "8-9AM, 4-5PM", 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"), OfficeHours = "6AM-6PM", 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"), OfficeHours = "By appointment only" }
};
В проекте ContosoUniversity откройте Instructors.aspx и добавьте новое поле шаблона для рабочих часов непосредственно перед закрывающим </Columns>
тегом в первом GridView
элементе управления:
<asp:TemplateField HeaderText="Office Hours">
<ItemTemplate>
<asp:Label ID="InstructorOfficeHoursLabel" runat="server" Text='<%# Eval("OfficeHours") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="InstructorOfficeHoursTextBox" runat="server" Text='<%# Bind("OfficeHours") %>'
Width="14em"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
Создайте решение.
Откройте окно Консоль диспетчера пакетов и выберите ContosoUniversity.DAL в качестве проекта по умолчанию.
Введите следующие команды:
add-migration AddOfficeHoursColumn
update-database
Запустите приложение и выберите страницу Преподаватели . Загрузка страницы занимает немного больше времени, чем обычно, так как Entity Framework повторно создает базу данных и заполняет ее тестовые данные.
Развертывание обновления базы данных в тестовой среде
При использовании Code First Migrations метод развертывания изменений базы данных в SQL Server такой же, как и для SQL Server Compact. Однако необходимо изменить профиль тестовой публикации, так как он по-прежнему настроен для миграции с SQL Server Compact на SQL Server.
Первым шагом является удаление преобразований строка подключения, созданных в предыдущем руководстве. Они больше не нужны, так как вы будете указывать строка подключения преобразования в профиле публикации, как это было до настройки вкладки Пакет/публикация SQL для миграции в SQL Server.
Откройте файлWeb.Test.config и удалите connectionStrings
элемент . Единственное оставшееся преобразование в файлеWeb.Test.config — для Environment
значения в элементе appSettings
.
Теперь можно обновить профиль публикации и опубликовать его в тестовой среде.
Откройте мастер публикации веб-страницы и перейдите на вкладку Профиль .
Выберите тестовый профиль публикации.
Перейдите на вкладку Параметры.
Щелкните Включить новые улучшения публикации базы данных.
В поле строка подключения для SchoolContext введите то же значение, которое использовалось в файле преобразования Web.Test.config в предыдущем руководстве:
Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
Выберите Выполнить Code First Migrations (выполняется при запуске приложения). (В вашей версии Visual Studio поле проверка может иметь метку Применить Code First Migrations.)
В поле строка подключения defaultConnection введите то же значение, которое использовалось в файле преобразованияWeb.Test.config в предыдущем руководстве:
Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
Оставьте обновление базы данных снятой.
Нажмите кнопку Опубликовать.
Visual Studio развертывает изменения кода в тестовой среде и открывает браузер на домашней странице Университета Contoso.
Выберите страницу Преподаватели.
Когда приложение запускает эту страницу, оно пытается получить доступ к базе данных. Code First Migrations проверяет, является ли база данных текущей, и обнаруживает, что последняя миграция еще не применена. Code First Migrations применяет последнюю миграциюSeed
, запускает метод , а затем страница запускается в обычном режиме. Вы увидите новый столбец "Часы Office" с заполненными данными.
Развертывание обновления базы данных в рабочей среде
Необходимо также изменить профиль публикации для рабочей среды. В этом случае вы удалите существующий профиль и создадите новый, импортировав обновленный файл .publishsettings. Обновленный файл будет содержать строка подключения для базы данных SQL Server в Cytanium.
Как вы видели при развертывании в тестовой среде, строка подключения преобразования в файле преобразованияWeb.Production.configбольше не требуются. Откройте этот файл и удалите connectionStrings
элемент . Остальные преобразования относятся к значению Environment
в элементе appSettings
и элементу location
, который ограничивает доступ к отчетам об ошибках Elmah.
Прежде чем создавать новый профиль публикации для рабочей среды, скачайте обновленный файл PUBLISHSETTINGS, как это было ранее в руководстве Развертывание в рабочей среде . (На панели управления Cytanium щелкните Веб-сайты, а затем выберите веб-сайт contosouniversity.com. Перейдите на вкладку Веб-публикация и щелкните Скачать профиль публикации для этого веб-сайта.) Причина заключается в том, чтобы получить базу данных строка подключения в файле publishsettings. Строка подключения не был доступен при первом скачивании файла, так как вы по-прежнему использовали SQL Server Compact и еще не создали базу данных SQL Server в Cytanium.
Теперь можно обновить профиль публикации и выполнить публикацию в рабочей среде.
Откройте мастер публикации веб-страницы и перейдите на вкладку Профиль .
Щелкните Управление профилями, а затем удалите рабочий профиль.
Закройте мастер публикации веб-страницы , чтобы сохранить это изменение.
Снова откройте мастер публикации веб-страницы и нажмите кнопку Импорт.
На вкладке Подключение измените целевой URL-адрес на соответствующее значение, если используется временный URL-адрес.
Щелкните Далее.
На вкладке Параметры щелкните Включить новые улучшения публикации базы данных.
В раскрывающемся списке строка подключения для SchoolContext выберите строка подключения Cytanium.
Выберите Выполнить код Первая миграция (выполняется при запуске приложения).
В раскрывающемся списке строка подключения для DefaultConnection выберите строка подключения Cytanium.
Перейдите на вкладку Профиль , щелкните Управление профилями и переименуйте профиль с "contosouniversity.com — веб-развертывание" на "Рабочая".
Закройте профиль публикации, чтобы сохранить изменения, а затем снова откройте его.
Нажмите кнопку Опубликовать. (Для реального рабочего веб-сайта необходимо скопировать app_offline.htm в рабочую среду и поместить его в папку проекта перед публикацией, а затем удалить после завершения развертывания.)
Visual Studio развертывает изменения кода в тестовой среде и открывает браузер на домашней странице Университета Contoso.
Выберите страницу Преподаватели.
Code First Migrations обновляет базу данных так же, как и в тестовой среде. Вы увидите новый столбец "Часы Office" с заполненными данными.
Теперь вы успешно развернули обновление приложения, включающее изменение базы данных, с помощью SQL Server базы данных.
Дополнительные сведения
На этом показано, как развернуть веб-приложение ASP.NET стороннему поставщику услуг размещения. Дополнительные сведения о любой из тем, описанных в этих руководствах, см. в статье Карта содержимого развертывания ASP.NET на веб-сайте MSDN.
Благодарности
Я хотел бы поблагодарить следующих людей, которые внесли значительный вклад в содержание этой серии учебников:
- Альберто Побласьон, MVP & MCT, Испания
- Джарод Фергюсон (Jarod Ferguson), MVP по разработке платформы данных, США
- Харш Миттал, Майкрософт
- Кристина Олсон (Kristina Olson), Майкрософт
- Майк Поуп(Mike Pope), Корпорация Майкрософт
- Мохит Шривастава, Майкрософт
- Раффаэле Риальди, Италия
- Рик Андерсон (Rick Anderson), Майкрософт
- Сайед Хашими, Microsoft(twitter: @sayedihashimi)
- Скотт Хансельман (twitter: @shanselman)
- Скотт Хантер, Майкрософт (twitter: @coolcsh)
- Srđan Božović, Сербия
- Vishal Joshi, Microsoft (twitter: @vishalrjoshi)