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


Развертывание веб-приложения 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 повторно создает базу данных и заполняет ее тестовые данные.

Instructors_page_with_office_hours

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

При использовании 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" с заполненными данными.

Instructors_page_with_OfficeHours_Test

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

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

Selecting_Cytanium_connection_string

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

В раскрывающемся списке строка подключения для DefaultConnection выберите строка подключения Cytanium.

Перейдите на вкладку Профиль , щелкните Управление профилями и переименуйте профиль с "contosouniversity.com — веб-развертывание" на "Рабочая".

Закройте профиль публикации, чтобы сохранить изменения, а затем снова откройте его.

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

Visual Studio развертывает изменения кода в тестовой среде и открывает браузер на домашней странице Университета Contoso.

Выберите страницу Преподаватели.

Code First Migrations обновляет базу данных так же, как и в тестовой среде. Вы увидите новый столбец "Часы Office" с заполненными данными.

Instructors_page_with_OfficeHours_Prod

Теперь вы успешно развернули обновление приложения, включающее изменение базы данных, с помощью SQL Server базы данных.

Дополнительные сведения

На этом показано, как развернуть веб-приложение ASP.NET стороннему поставщику услуг размещения. Дополнительные сведения о любой из тем, описанных в этих руководствах, см. в статье Карта содержимого развертывания ASP.NET на веб-сайте MSDN.

Благодарности

Я хотел бы поблагодарить следующих людей, которые внесли значительный вклад в содержание этой серии учебников: