Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как развернуть (опубликовать) веб-приложение ASP.NET в веб-приложениях Службы приложений Azure или в стороннем поставщике услуг размещения с помощью Visual Studio 2012 или Visual Studio 2010. Сведения о серии см. в первом руководстве в серии.
Обзор
В этом руководстве показано, как подготовить проект к развертыванию базы данных. Структура базы данных и некоторые (не все) данные в двух базах данных приложения должны быть развернуты для тестирования, промежуточной и рабочей сред.
Как правило, при разработке приложения вы вводите тестовые данные в базу данных, которую вы не хотите развернуть на динамическом сайте. Однако у вас также могут быть некоторые производственные данные, которые требуется развернуть. В этом руководстве вы настроите проект Университета Contoso и подготовите скрипты SQL, чтобы при развертывании были включены правильные данные.
Напоминание. Если вы получаете сообщение об ошибке или что-то не работаете по мере прохождения руководства, обязательно проверьте страницу устранения неполадок.
SQL Server Express LocalDB (локальная база данных)
В примере приложения используется SQL Server Express LocalDB. SQL Server Express — это бесплатный выпуск SQL Server. Он часто используется во время разработки, так как он основан на том же ядре СУБД, что и полные версии SQL Server. Вы можете протестировать с помощью SQL Server Express и убедиться, что приложение будет вести себя одинаково в рабочей среде с несколькими исключениями для функций, которые зависят от выпусков SQL Server.
LocalDB — это специальный режим выполнения SQL Server Express, который позволяет работать с базами данных в виде .mdf файлов. Как правило, файлы базы данных LocalDB хранятся в папке App_Data веб-проекта. Функция экземпляра пользователя в SQL Server Express также позволяет работать с .mdf файлами, но функция экземпляра пользователя устарела. Поэтому для работы с файлами .mdf рекомендуется использовать LocalDB.
Обычно SQL Server Express не используется для рабочих веб-приложений. В частности, localDB не рекомендуется использовать в рабочей среде с веб-приложением, так как он не предназначен для работы с IIS.
В Visual Studio 2012 LocalDB устанавливается по умолчанию вместе с Visual Studio. В Visual Studio 2010 и более ранних версиях SQL Server Express (без LocalDB) устанавливается по умолчанию вместе с Visual Studio; поэтому вы установили его в качестве одного из предварительных требований в первом руководстве в этой серии.
Дополнительные сведения о выпусках SQL Server, включая LocalDB, см. в следующих материалах: Работа с базами данных SQL Server.
Entity Framework и универсальные поставщики
Для доступа к базе данных приложению Contoso University требуется следующее программное обеспечение, которое должно быть развернуто с приложением, так как оно не входит в .NET Framework:
- ASP.NET универсальные поставщики (позволяет системе членства ASP.NET использовать базу данных SQL Azure)
- Entity Framework
Так как это программное обеспечение входит в пакеты NuGet, проект уже настроен так, чтобы необходимые сборки развертывались с помощью проекта. (Ссылки указывают на текущие версии этих пакетов, которые могут быть более новыми, чем то, что установлено в начальном проекте, который вы скачали для этого руководства.)
Если вы развертываете на стороннем поставщике услуг размещения вместо Azure, убедитесь, что вы используете Entity Framework 5.0 или более поздней версии. Более ранние версии Code First Migrations требуют полного доверия, и большинство поставщиков услуг размещения будут запускать приложение в среднем доверии. Дополнительные сведения о Medium Trust см. в руководстве по развертыванию в IIS как тестовую среду.
Настройка первой миграции кода для развертывания базы данных приложений
База данных приложения Contoso University управляется code First, и вы развернете ее с помощью code First Migrations. Общие сведения о развертывании базы данных с помощью code First Migrations см. в первом руководстве в этой серии.
При развертывании базы данных приложения обычно не просто развертываете базу данных разработки со всеми данными в рабочей среде, так как большая часть данных в ней, вероятно, существует только для тестирования. Например, имена учащихся в тестовой базе данных вымышлены. С другой стороны, часто невозможно развернуть только структуру базы данных без каких-либо данных в ней. Некоторые данные в тестовой базе данных могут быть реальными данными и должны быть там, когда пользователи начинают использовать приложение. Например, в базе данных может быть таблица, содержащая допустимые значения оценок или имена реальных отделов.
Чтобы имитировать этот распространенный сценарий, вы настроите метод Code First Migrations Seed, который вставляет в базу данных только те данные, которые вы хотите поместить в производственную среду. Этот Seed метод не должен вставлять тестовые данные, так как он будет выполняться в продакшене после создания базы данных с помощью Code First.
В более ранних версиях Code First, до выхода Migrations, часто использовались методы Seed для вставки тестовых данных, так как при каждом изменении модели во время разработки база данных должна была быть полностью удалена и воссоздана с нуля. В случае использования Code First Migrations тестовые данные сохраняются после изменений базы данных, поэтому включать тестовые данные в методе Seed не требуется. Скачанный проект использует метод включения всех данных в Seed метод класса инициализатора. В этом руководстве вы отключите этот класс инициализатора и включите миграции. Затем вы обновите Seed метод в классе конфигурации Migrations, чтобы он вставлял только данные, которые необходимо вставить в рабочую среду.
На следующей схеме показана схема базы данных приложения:
В этих руководствах предполагается, что StudentEnrollment таблицы должны быть пустыми при первом развертывании сайта. Другие таблицы содержат данные, которые должны быть предварительно загружены при запуске приложения.
Отключение инициализатора
Так как вы будете использовать Code First Migrations, вам не нужно использовать DropCreateDatabaseIfModelChanges инициализатор Code First. Код для этого инициализатора находится в файле SchoolInitializer.cs в проекте ContosoUniversity.DAL. Параметр в элементе appSettings файла Web.config вызывает запуск этого инициализатора всякий раз, когда приложение пытается получить доступ к базе данных в первый раз:
<appSettings>
<add key="Environment" value="Dev" />
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" value="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.DAL" />
</appSettings>
Откройте файл приложенияWeb.config и удалите или закомментируйте add элемент, указывающий класс инициализатора Code First. Теперь appSettings элемент выглядит следующим образом:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Замечание
Другим способом указать класс инициализатора является вызов Database.SetInitializerApplication_Start метода в файле Global.asax . Если вы включаете миграции в проекте, использующего этот метод для указания инициализатора, удалите эту строку кода.
Замечание
Если вы используете Visual Studio 2013, добавьте следующие шаги между шагами 2 и 3. (a) В PMC введите "update-package entityframework -version 6.1.1", чтобы получить текущую версию EF. Затем (b) создайте проект, чтобы получить список ошибок сборки и исправить их. Удалите инструкции using для пространств имен, которые больше не существуют, щелкните правой кнопкой мыши и выберите "Разрешить", чтобы добавить инструкции using, где они необходимы, и измените вхождения System.Data.EntityState на System.Data.Entity.EntityState.
Включение Code First Migrations
Убедитесь, что проект ContosoUniversity (не ContosoUniversity.DAL) задан в качестве запускаемого проекта. В обозревателе решений щелкните правой кнопкой мыши проект ContosoUniversity и выберите "Задать в качестве запускаемого проекта". Миграция Code First будет искать в стартовом проекте строку подключения к базе данных.
В меню "Сервис" выберитеконсоль диспетчера> пакетов NuGet.
В верхней части окна консоли диспетчера пакетов выберите ContosoUniversity.DAL в качестве проекта по умолчанию, а затем в командной
PM>строке введите "enable-migrations".
(Если вы получите сообщение об ошибке, указывающей, что команда enable-migrations не распознана, введите команду update-package EntityFramework -Reinstall и повторите попытку.)
Эта команда создает папку Migrations в проекте ContosoUniversity.DAL и помещает в нее два файла: файл Configuration.cs , который можно использовать для настройки миграций, и файл InitialCreate.cs для первой миграции, создающей базу данных.
Вы выбрали проект DAL в раскрывающемся списке проекта по умолчаниюконсоли диспетчера пакетов , так как
enable-migrationsкоманда должна выполняться в проекте, содержающем класс контекста Code First. Когда этот класс находится в проекте библиотеки классов, Code First Migrations ищет строку подключения к базе данных в запускаемом проекте для решения. В решении ContosoUniversity веб-проект был задан в качестве запускаемого проекта. Если вы не хотите назначить проект с строкой подключения в качестве запускаемого проекта в Visual Studio, можно указать проект запуска в команде PowerShell. Чтобы просмотреть синтаксис команды, введите командуget-help enable-migrations.Команда
enable-migrationsавтоматически создала первую миграцию, так как база данных уже существует. Альтернативой является создание базы данных с помощью механизмов миграций. Для этого используйте обозреватель сервера или обозреватель объектов SQL Server , чтобы удалить базу данных ContosoUniversity перед включением миграций. После включения миграции создайте первую миграцию вручную, введя команду "Add-migration InitialCreate". Затем можно создать базу данных, введя команду update-database.
Настройка метода Seed
В этом руководстве вы добавите фиксированные данные, вставив код в метод Seed класса Code First Migrations Configuration. Code First Migrations вызывает метод Seed после каждой миграции.
Seed Так как метод выполняется после каждой миграции, данные уже есть в таблицах после первой миграции. Для обработки этой ситуации вы будете использовать AddOrUpdate метод для обновления строк, которые уже вставлены, или вставить их, если они еще не существуют. Метод AddOrUpdate может быть не лучшим вариантом для вашего сценария. Для получения дополнительной информации см. в записи "Будьте внимательны с методом EF 4.3 AddOrUpdate" на блоге Джули Лерман.
Откройте файл Configuration.cs и замените комментарии в
Seedметоде следующим кодом:var instructors = new List<Instructor> { new Instructor { FirstMidName = "Kim", LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } }, new Instructor { FirstMidName = "Fadi", LastName = "Fakhouri", HireDate = DateTime.Parse("2002-07-06"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } }, new Instructor { FirstMidName = "Roger", LastName = "Harui", HireDate = DateTime.Parse("1998-07-01"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } }, new Instructor { FirstMidName = "Candace", LastName = "Kapoor", HireDate = DateTime.Parse("2001-01-15") }, new Instructor { FirstMidName = "Roger", LastName = "Zheng", HireDate = DateTime.Parse("2004-02-12") } }; instructors.ForEach(s => context.Instructors.AddOrUpdate(i => i.LastName, s)); context.SaveChanges(); var departments = new List<Department> { new Department { Name = "English", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 1 }, new Department { Name = "Mathematics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 2 }, new Department { Name = "Engineering", Budget = 350000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 3 }, new Department { Name = "Economics", Budget = 100000, StartDate = DateTime.Parse("2007-09-01"), PersonID = 4 } }; departments.ForEach(s => context.Departments.AddOrUpdate(d => d.Name, s)); context.SaveChanges(); var courses = new List<Course> { new Course { CourseID = 1050, Title = "Chemistry", Credits = 3, DepartmentID = 3 }, new Course { CourseID = 4022, Title = "Microeconomics", Credits = 3, DepartmentID = 4 }, new Course { CourseID = 4041, Title = "Macroeconomics", Credits = 3, DepartmentID = 4 }, new Course { CourseID = 1045, Title = "Calculus", Credits = 4, DepartmentID = 2 }, new Course { CourseID = 3141, Title = "Trigonometry", Credits = 4, DepartmentID = 2 }, new Course { CourseID = 2021, Title = "Composition", Credits = 3, DepartmentID = 1 }, new Course { CourseID = 2042, Title = "Literature", Credits = 4, DepartmentID = 1 } }; courses.ForEach(s => context.Courses.AddOrUpdate(s)); context.SaveChanges(); courses[0].Instructors.Add(instructors[0]); courses[0].Instructors.Add(instructors[1]); courses[1].Instructors.Add(instructors[2]); courses[2].Instructors.Add(instructors[2]); courses[3].Instructors.Add(instructors[3]); courses[4].Instructors.Add(instructors[3]); courses[5].Instructors.Add(instructors[3]); courses[6].Instructors.Add(instructors[3]); context.SaveChanges();Ссылки на
Listимеют красные волнистые линии под ними, так как у вас еще нет оператораusingдля этого пространства имен. Щелкните правой кнопкой мыши один из экземпляровListи нажмите Разрешить, затем выберите using System.Collections.Generic.
Этот пункт меню добавляет следующий код в
usingинструкции, расположенные в верхней части файла.using System.Collections.Generic;Нажмите клавиши CTRL-SHIFT-B, чтобы создать проект.
Теперь проект готов к развертыванию базы данных ContosoUniversity . После развертывания приложения при первом запуске и переходе на страницу, которая обращается к базе данных, Code First создаст базу данных и запустит Seed метод.
Замечание
Добавление кода в Seed метод является одним из многих способов вставки фиксированных данных в базу данных. Альтернативой может быть добавление кода в методы Up и Down каждого класса миграции.
Up Методы Down содержат код, реализующий изменения базы данных. Вы увидите примеры из них в руководстве по развертыванию обновления базы данных .
Вы также можете написать код, выполняющий инструкции SQL с помощью Sql метода. Например, если вы добавляете столбец "Бюджет" в таблицу Department и хотите инициализировать все бюджеты отдела до $1,000.00 в рамках миграции, вы можете добавить следующую строку кода в Up метод для этой миграции:
Sql("UPDATE Department SET Budget = 1000");
Создание скриптов для развертывания базы данных членства
Приложение Contoso University использует систему членства ASP.NET и аутентификацию на основе форм для аутентификации и авторизации пользователей. Страница "Обновить кредиты" доступна только пользователям, которые находятся в роли администратора.
Запустите приложение и щелкните "Курсы", а затем нажмите кнопку "Обновить кредиты".
Откроется страница входа , так как для страницы "Обновить кредиты" требуются права администратора.
Введите администратора в качестве имени пользователя и devpwd в качестве пароля и нажмите кнопку "Войти".
Откроется страница "Обновить кредиты ".
Сведения о пользователях и роли содержатся в базе данных aspnet-ContosoUniversity , указанной строкой подключения DefaultConnection в файле Web.config .
Эта база данных не управляется с помощью Entity Framework Code First, поэтому для его развертывания нельзя использовать миграции. Вы будете использовать поставщик dbDacFx для развертывания схемы базы данных, и вы настроите профиль публикации для запуска скрипта, который будет вставлять исходные данные в таблицы базы данных.
Замечание
В Visual Studio 2013 появилась новая система членства ASP.NET (теперь именованная ASP.NET Identity). Новая система позволяет хранить и приложения, и таблицы членства в одной базе данных, и вы можете использовать code First Migrations для развертывания обоих. В примере приложения используется более ранняя ASP.NET система членства, которая не может быть развернута с помощью code First Migrations. Процедуры развертывания этой базы данных членства применяются также к любому другому сценарию, в котором приложение должно развернуть базу данных SQL Server, которая не создана в Entity Framework Code First.
Здесь также, как правило, вы не хотите те же данные в продакшне, что и в разработке. При первом развертывании сайта обычно исключается большинство учетных записей пользователей, создаваемых для тестирования. Таким образом, скачанный проект содержит две базы данных членства: aspnet-ContosoUniversity.mdf с пользователями разработки и aspnet-ContosoUniversity-Prod.mdf с рабочими пользователями. В этом руководстве имена пользователей одинаковы в обеих базах данных: администратор и неадмин. Оба пользователя имеют пароль devpwd в базе данных разработки и prodpwd в рабочей базе данных.
Вы развернете пользователей разработки в тестовой среде, а пользователей продуктивной среды в подготовительной и продуктивной среде. Для этого вы создадите два скрипта SQL в этом руководстве, один для разработки и один для рабочей среды, а в последующих руководствах вы настроите процесс публикации для их запуска.
Замечание
База данных членства хранит хэш паролей учетных записей. Чтобы развернуть учетные записи с одного компьютера на другой, необходимо убедиться, что хэш-процедуры не создают разные хэши на целевом сервере, чем на исходном компьютере. Они будут создавать те же хэши при использовании ASP.NET универсальных провайдеров, если алгоритм по умолчанию не изменяется. Алгоритм по умолчанию HMACSHA256 и указан в атрибуте проверки элемента machineKey в файле Web.config.
Сценарии развертывания данных можно создавать вручную с помощью SQL Server Management Studio (SSMS) или с помощью стороннего средства. В оставшейся части этого руководства вы узнаете, как это сделать в SSMS, но если вы не хотите устанавливать и использовать SSMS, вы можете получить скрипты из завершенной версии проекта и перейти к разделу, в котором они хранятся в папке решения.
Чтобы установить SSMS, установите его из Центра загрузки: Microsoft SQL Server 2012 Express , щелкнув ENU\x64\SQLManagementStudio_x64_ENU.exe или ENU\x86\SQLManagementStudio_x86_ENU.exe. Если вы выбрали неправильный вариант для системы, он не сможет установить, и вы можете попробовать другой.
(Обратите внимание, что это 600 мегабайт загрузки. Установка может занять много времени и потребует перезагрузки компьютера.)
На первой странице Центра установки SQL Server щелкните "Создать автономную установку SQL Server" или добавьте компоненты в существующую установку и следуйте инструкциям, принимая варианты по умолчанию.
Создание скрипта базы данных разработки
Запустите SSMS.
В диалоговом окне "Подключение к серверу" введите (localdb)\v11.0 в качестве имени сервера, оставьте проверку подлинности на Windows для проверки подлинности Windows, и нажмите Подключить.
В окне обозревателя объектов разверните узел "Базы данных", щелкните правой кнопкой мыши aspnet-ContosoUniversity, выберите "Задачи" и выберите пункт "Создать скрипты".
В диалоговом окне "Создание и публикация скриптов" нажмите кнопку "Задать параметры скриптов".
Вы можете пропустить шаг "Выбрать объекты ", так как по умолчанию используется все базы данных скрипта и все объекты базы данных , и это то, что нужно.
Нажмите кнопку "Дополнительно".
В диалоговом окне "Дополнительные параметры скрипта " прокрутите вниз до типов данных в скрипт и выберите параметр "Только данные " в раскрывающемся списке.
Измените скрипт USE DATABASE на False. Инструкции USE недопустимы для базы данных SQL Azure и не требуются для развертывания в SQL Server Express в тестовой среде.
Нажмите кнопку ОК.
В диалоговом окне "Создание и публикация скриптов" поле "Имя файла " указывает, где будет создан скрипт. Измените путь к папке вашего решения (папке, содержащей файл ContosoUniversity.sln), и измените имя файла на aspnet-data-dev.sql.
Нажмите кнопку "Далее ", чтобы перейти на вкладку "Сводка ", а затем нажмите кнопку "Далее ", чтобы создать скрипт.
Нажмите кнопку "Готово".
Создание скрипта рабочей базы данных
Так как проект не запущен с рабочей базой данных, он еще не подключен к экземпляру LocalDB. Поэтому сначала необходимо подключить базу данных.
В обозревателе объектов SSMS щелкните правой кнопкой мыши базы данных и нажмите кнопку "Подключить".
В диалоговом окне "Присоединить базы данных " нажмите кнопку "Добавить ", а затем перейдите к файлу aspnet-ContosoUniversity-Prod.mdf в папке App_Data .
Нажмите кнопку ОК.
Выполните ту же процедуру, которую вы использовали ранее для создания скрипта для рабочего файла. Назовите файл скрипта aspnet-data-prod.sql.
Сводка
Обе базы данных теперь готовы к развертыванию, и в папке решения есть два сценария развертывания данных.
В следующем руководстве описана настройка параметров проекта, влияющих на развертывание, и вы настраиваете автоматические преобразования файлов Web.config для параметров, которые должны отличаться в развернутом приложении.
Дополнительная информация
Для получения дополнительной информации о NuGet см. Управление библиотеками проектов с помощью NuGet и Документацию по NuGet. Если вы не хотите использовать NuGet, вам потребуется узнать, как проанализировать пакет NuGet, чтобы определить, что он делает при установке. (Например, он может настроить преобразования Web.config , настроить скрипты PowerShell для выполнения во время сборки и т. д.) Дополнительные сведения о том, как работает NuGet, см. в статье "Создание и публикация файла пакета ифайла конфигурации" и "Преобразования исходного кода".