начало работы с Entity Framework 4.0 Database First и ASP.NET 4 веб-формы
Пример веб-приложения Университета Contoso демонстрирует создание ASP.NET Web Forms приложений с помощью Entity Framework 4.0 и Visual Studio 2010. Пример приложения — это веб-сайт вымышленного университета Contoso. На нем предусмотрены различные функции, в том числе прием учащихся, создание курсов и назначение преподавателей.
В этом руководстве приведены примеры на C#. Загружаемый пример содержит код на C# и Visual Basic.
База данных в первую очередь
Существует три способа работы с данными в Entity Framework: Database First, Model First и Code First. Это руководство предназначено для Database First. Сведения о различиях между этими рабочими процессами и рекомендации по выбору оптимального для вашего сценария см. в разделе Рабочие процессы разработки Entity Framework.
веб-формы
В этой серии руководств используется модель ASP.NET Web Forms и предполагается, что вы умеете работать с ASP.NET Web Forms в Visual Studio. В противном случае см. раздел начало работы с веб-формы ASP.NET 4.5. Если вы предпочитаете работать с платформой ASP.NET MVC, см. статью начало работы с Entity Framework с помощью ASP.NET MVC.
Версии программного обеспечения
Показано в руководстве Также работает с Windows 7 Windows 8 Visual Studio 2010 Visual Studio 2010 Express для Web. Это руководство не было протестировано в более поздних версиях Visual Studio. Существует множество различий в выборе меню, диалоговых окнах и шаблонах. .NET 4 .NET 4.5 обратно совместим с .NET 4, но это руководство не было протестировано с .NET 4.5. Entity Framework 4 Руководство не тестировалось в более поздних версиях Entity Framework. Начиная с Entity Framework 5, EF использует по умолчанию DbContext API
, который был представлен в EF 4.1. Элемент управления EntityDataSource был разработан для использованияObjectContext
API. Сведения об использовании элемента управления EntityDataSource с API см. вDbContext
этой записи блога.Вопросы
Если у вас есть вопросы, которые не связаны непосредственно с этим руководством, вы можете опубликовать их на форуме ASP.NET Entity Framework, Entity Framework и LINQ to Entities форуме или StackOverflow.com.
Общие сведения
Приложение, которое вы будете создавать в этих руководствах, — это простой университетский веб-сайт.
Пользователи приложения могут просматривать и обновлять сведения об учащихся, курсах и преподавателях. Ниже приведены некоторые экраны, которые вы создадите.
Создание веб-приложения
Чтобы приступить к работе с этим руководством, откройте Visual Studio и создайте проект веб-приложения ASP.NET с помощью шаблона веб-приложения ASP.NET :
Этот шаблон создает проект веб-приложения, который уже содержит таблицу стилей и master страниц:
Откройте файл Site.Master и измените "My ASP.NET Application" на "Contoso University".
<h1>
Contoso University
</h1>
Найдите элемент управления Menu с именем NavigationMenu
и замените его следующей разметкой, которая добавляет пункты меню для страниц, которые вы будете создавать.
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
<asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
<asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
<asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
<asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
<asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
<asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
<asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
</asp:MenuItem>
</Items>
</asp:Menu>
Откройте страницу Default.aspx и измените Content
элемент управления BodyContent
на следующий:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Welcome to Contoso University!
</h2>
</asp:Content>
Теперь у вас есть простая домашняя страница со ссылками на различные страницы, которые вы будете создавать:
Создание базы данных
В этих руководствах вы будете использовать конструктор моделей данных Entity Framework для автоматического создания модели данных на основе существующей базы данных (часто называемой подходом " база данных в первую очередь "). Альтернативой, которая не рассматривается в этой серии руководств, является создание модели данных вручную, а затем создание конструктором скриптов, создающих базу данных (подход на основе модели ).
Для метода database-first, используемого в этом руководстве, следующим шагом является добавление базы данных на сайт. Самый простой способ — сначала скачать проект, который входит в это руководство. Затем щелкните правой кнопкой мыши папку App_Data , выберите Добавить существующий элемент и выберите файл базы данных School.mdf из скачаного проекта.
В качестве альтернативы можно выполнить инструкции из статьи Создание учебного примера базы данных. Независимо от того, скачиваете ли вы базу данных или создаете ее, скопируйте файл School.mdf из следующей папки в папку App_Data приложения:
%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
(В этом расположении MDF-файла предполагается, что вы используете SQL Server 2008 Express.)
Если вы создаете базу данных из скрипта, выполните следующие действия, чтобы создать схему базы данных:
В Обозреватель сервера разверните узлы Подключения к данным, School.mdf, щелкните правой кнопкой мыши диаграммы баз данных и выберите Добавить новую схему.
Выберите все таблицы и нажмите кнопку Добавить.
SQL Server создает схему базы данных, которая показывает таблицы, столбцы в таблицах и связи между таблицами. Вы можете перемещать таблицы, чтобы упорядочить их, как вам нравится.
Сохраните схему как SchoolDiagram и закройте ее.
Если вы скачаете файл School.mdf, который входит в этот учебник, вы можете просмотреть схему базы данных, дважды щелкнув SchoolDiagram в разделе Схемы баз данных в Обозреватель сервера.
Схема выглядит примерно так (таблицы могут находиться в разных местах, чем здесь):
Создание модели данных Entity Framework
Теперь вы можете создать модель данных Entity Framework из этой базы данных. Модель данных можно создать в корневой папке приложения, но для работы с этим руководством вы разместите ее в папке с именем DAL (для уровня доступа к данным).
В Обозреватель решений добавьте папку проекта с именем DAL (убедитесь, что она находится в проекте, а не в решении).
Щелкните правой кнопкой мыши папку DAL и выберите добавить и создать элемент. В разделе Установленные шаблоны выберите Данные, выберите шаблон модель ADO.NET entity Data Model , назовите его SchoolModel.edmx и нажмите кнопку Добавить.
При этом запустится мастер модели entity Data Model. На первом шаге мастера по умолчанию выбран параметр Создать из базы данных . Щелкните Далее.
На шаге Выбор подключения к данным оставьте значения по умолчанию и нажмите кнопку Далее. База данных School выбрана по умолчанию, и параметр подключения сохраняется в файлеWeb.config как SchoolEntities.
На шаге мастера Выбор объектов базы данных выберите все таблицы, кроме sysdiagrams
(которые были созданы для созданной ранее схемы) и нажмите кнопку Готово.
После завершения создания модели Visual Studio отобразит графическое представление объектов (сущностей) Entity Framework, соответствующих таблицам базы данных. (Как и на схеме базы данных, расположение отдельных элементов может отличаться от того, что вы видите на этом рисунке. При желании можно перетащить элементы в соответствии с иллюстрацией.)
Изучение модели данных Entity Framework
Видно, что схема сущностей очень похожа на схему базы данных с несколькими отличиями. Одно из различий заключается в добавлении символов в конце каждой ассоциации, которые указывают тип ассоциации (табличные связи называются ассоциациями сущностей в модели данных):
Связь "один к нулю или одному" представлена "1" и "0..1".
В этом случае сущность может быть связана
Person
с сущностью или не может быть связана с нейOfficeAssignment
. СущностьOfficeAssignment
должна быть связана с сущностьюPerson
. Другими словами, инструктор может быть назначен в офис, а любой офис может быть назначен только одному преподавателю.Связь "один ко многим" представлена "1" и "*".
В этом случае
Person
сущность может иметь или не иметь связанныхStudentGrade
сущностей. СущностьStudentGrade
должна быть связана с однойPerson
сущностью.StudentGrade
сущности фактически представляют зарегистрированные курсы в этой базе данных; Если учащийся зачислен в курс и еще нет оценки,Grade
свойство имеет значение NULL. Другими словами, учащийся может быть еще не зачислен на какие-либо курсы, может быть зачислен в один курс или может быть зарегистрирован в нескольких курсах. Каждый балл в зачисленном курсе применяется только к одному учащемуся.Связь "многие ко многим" представлена символами "*" и "*".
В этом случае
Person
сущность может иметь или не иметь связанныхCourse
сущностей, и верно и обратное:Course
сущность может иметь или не иметь связанныхPerson
сущностей. Другими словами, преподаватель может преподавать несколько курсов, а курс может преподавать несколько инструкторов. (В этой базе данных эта связь применяется только к преподавателям; она не связывает учащихся с курсами. Учащиеся связаны с курсами в таблице StudentGrades.)
Еще одним различием между схемой базы данных и моделью данных является дополнительный раздел Свойства навигации для каждой сущности. Свойство навигации сущности ссылается на связанные сущности. Например, Courses
свойство в сущности Person
содержит коллекцию всех сущностей Course
, связанных с этой Person
сущностью.
Еще одно различие между базой данных и моделью данных заключается в отсутствии таблицы сопоставлений CourseInstructor
, которая используется в базе данных для связывания Person
таблиц и Course
в связи "многие ко многим". Свойства навигации позволяют получать связанные Course
сущности из сущности Person
и связанные Person
сущности из Course
сущности, поэтому нет необходимости представлять таблицу сопоставлений в модели данных.
Для целей этого руководства предположим, что FirstName
столбец Person
таблицы на самом деле содержит имя и отчество пользователя. Вы хотите изменить имя поля в соответствии с этим, но администратор базы данных (DBA) может не захотеть изменять базу данных. Вы можете изменить имя FirstName
свойства в модели данных, оставив его эквивалент базы данных без изменений.
В конструкторе щелкните правой кнопкой мыши имя в сущности Person
и выберите команду Переименовать.
Введите новое имя FirstMidName. Это изменяет способ ссылки на столбец в коде без изменения базы данных.
Браузер моделей предоставляет другой способ просмотра структуры базы данных, структуры модели данных и сопоставления между ними. Чтобы просмотреть его, щелкните правой кнопкой мыши пустую область в конструкторе сущностей и выберите пункт Обозреватель моделей.
На панели Обозреватель моделей отображается представление в виде дерева. (Область Обозреватель моделей может быть закреплена с областью Обозреватель решений.) Узел SchoolModel представляет структуру модели данных, а узел SchoolModel.Store представляет структуру базы данных.
Разверните SchoolModel.Store , чтобы просмотреть таблицы, разверните узел Таблицы и представления , чтобы просмотреть таблицы, а затем — Узел Курс , чтобы просмотреть столбцы в таблице.
Разверните Узел SchoolModel, Типы сущностей, а затем узел Курс , чтобы просмотреть сущности и свойства в сущностях.
В области конструктора или обозревателя моделей можно увидеть, как Entity Framework связывает объекты двух моделей. Щелкните правой Person
кнопкой мыши сущность и выберите Сопоставление таблиц.
Откроется окно Сведения о сопоставлении . Обратите внимание, что в этом окне можно увидеть, что столбец FirstName
базы данных сопоставлен с FirstMidName
, который вы переименовали в модель данных.
Entity Framework использует XML для хранения сведений о базе данных, модели данных и сопоставлениях между ними. Файл SchoolModel.edmx фактически является XML-файлом, содержащим эти сведения. Конструктор отображает информацию в графическом формате, но вы также можете просмотреть файл в формате XML, щелкнув правой кнопкой мыши EDMX-файл в Обозреватель решений, выбрав команду Открыть с помощью и выбрав редактор XML (текст). (Конструктор моделей данных и редактор XML — это всего лишь два разных способа открытия одного файла и работы с ним, поэтому конструктор не может одновременно открывать и открывать файл в редакторе XML.)
Вы создали веб-сайт, базу данных и модель данных. В следующем пошаговом руководстве вы приступите к работе с данными с помощью модели данных и элемента управления ASP.NET EntityDataSource
.