Развертывание веб-приложения ASP.NET с SQL Server Compact с помощью Visual Studio или Visual Web Developer: развертывание обновления базы данных — 9 из 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, и развертывание в Служба приложений Azure веб-приложения см. в разделе ASP.NET веб-развертывание с помощью Visual Studio.

Общие сведения

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

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

Добавление нового столбца в таблицу

В этом разделе вы добавите столбец даты рождения в базовый 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 откройте Instructors.aspx и добавьте новое поле шаблона для отображения даты рождения. Добавьте его между датами найма и назначением офиса:

<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>

(Если отступ кода выходит из синхронизации, можно нажать клавиши CTRL+K и CTRL-D, чтобы автоматически переформатировать файл.)

Выполните сборку решения, а затем откройте окно Консоль диспетчера пакетов . Убедитесь, что ContosoUniversity.DAL по-прежнему выбран в качестве проекта по умолчанию.

В окне Консоль диспетчера пакетов выберите ContosoUniversity.DAL в качестве проекта по умолчанию и введите следующую команду:

add-migration AddBirthDate

После завершения этой команды Visual Studio открывает файл класса, определяющий новый DbMigration класс, и в Up методе можно увидеть код, создающий новый столбец.

AddBirthDate_migration_code

Выполните сборку решения, а затем введите следующую команду в окне консоли диспетчера пакетов (убедитесь, что проект ContosoUniversity.DAL по-прежнему выбран):

update-database

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

Instructors_page_with_birth_date

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

В Обозреватель решений выберите проект ContosoUniversity.

На панели инструментов Веб-публикация одним щелчком выберите тестовый профиль публикации и нажмите кнопку Опубликовать веб-сайт. (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)

Visual Studio развертывает обновленное приложение, и браузер открывает домашнюю страницу. Запустите страницу Преподаватели, чтобы убедиться, что обновление успешно развернуто. Когда приложение пытается получить доступ к базе данных для этой страницы, Code First обновляет схему базы данных и запускает Seed метод . При отображении страницы отображается ожидаемый столбец "Дата рождения " с датами.

Instructors_page_with_birth_date_Test

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

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

  • Отправьте файлapp_offline.htm на рабочий сайт.
  • В Visual Studio выберите рабочий профиль на панели инструментов Публикация одним щелчком в Интернете и щелкните Опубликовать веб-сайт.
  • Удалите файлapp_offline.htm с рабочего сайта.

Примечание

Пока приложение используется в рабочей среде, следует реализовать план резервного копирования. Это значит, что файлы School-Prod.sdf и aspnet-Prod.sdf следует периодически копировать с рабочего сайта в безопасное место хранения, а также хранить несколько поколений таких резервных копий. При обновлении базы данных необходимо создать резервную копию непосредственно перед изменением. Затем, если вы допустите ошибку и не обнаружите ее до развертывания в рабочей среде, вы по-прежнему сможете восстановить базу данных в том состоянии, в которое она находилась до ее повреждения.

Когда Visual Studio открывает URL-адрес домашней страницы в браузере, отображается страницаapp_offline.htm . После удаления файлаapp_offline.htm можно снова перейти на домашнюю страницу, чтобы убедиться, что обновление успешно развернуто.

Instructors_page_with_birth_date_Prod

Вы развернули обновление приложения, включающее изменения базы данных как в тестовой, так и в рабочей среде. В следующем руководстве показано, как перенести базу данных из SQL Server Compact в SQL Server Express и SQL Server.