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


начало работы с Entity Framework 4.0 Database First и ASP.NET 4 веб-формы

Том Дайкстра (Tom Dykstra)

Пример веб-приложения Университета 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.

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

Приложение, которое вы будете создавать в этих руководствах, — это простой университетский веб-сайт.

Снимок экрана: домашняя страница Университета Contoso, на которой отображаются ссылки на страницы

Пользователи приложения могут просматривать и обновлять сведения об учащихся, курсах и преподавателях. Ниже приведены некоторые экраны, которые вы создадите.

Изображение30

Изображение37

Изображение31

Изображение32

Создание веб-приложения

Чтобы приступить к работе с этим руководством, откройте Visual Studio и создайте проект веб-приложения ASP.NET с помощью шаблона веб-приложения ASP.NET :

Изображение01

Этот шаблон создает проект веб-приложения, который уже содержит таблицу стилей и master страниц:

Изображение02

Откройте файл 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>

Теперь у вас есть простая домашняя страница со ссылками на различные страницы, которые вы будете создавать:

Снимок экрана: домашняя страница Университета Contoso, на которой показаны ссылки на страницы

Создание базы данных

В этих руководствах вы будете использовать конструктор моделей данных 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.)

Если вы создаете базу данных из скрипта, выполните следующие действия, чтобы создать схему базы данных:

  1. В Обозреватель сервера разверните узлы Подключения к данным, School.mdf, щелкните правой кнопкой мыши диаграммы баз данных и выберите Добавить новую схему.

    Изображение35

  2. Выберите все таблицы и нажмите кнопку Добавить.

    Изображение36

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

  3. Сохраните схему как SchoolDiagram и закройте ее.

Если вы скачаете файл School.mdf, который входит в этот учебник, вы можете просмотреть схему базы данных, дважды щелкнув SchoolDiagram в разделе Схемы баз данных в Обозреватель сервера.

Изображение38

Схема выглядит примерно так (таблицы могут находиться в разных местах, чем здесь):

Изображение04

Создание модели данных Entity Framework

Теперь вы можете создать модель данных Entity Framework из этой базы данных. Модель данных можно создать в корневой папке приложения, но для работы с этим руководством вы разместите ее в папке с именем DAL (для уровня доступа к данным).

В Обозреватель решений добавьте папку проекта с именем DAL (убедитесь, что она находится в проекте, а не в решении).

Щелкните правой кнопкой мыши папку DAL и выберите добавить и создать элемент. В разделе Установленные шаблоны выберите Данные, выберите шаблон модель ADO.NET entity Data Model , назовите его SchoolModel.edmx и нажмите кнопку Добавить.

Image05

При этом запустится мастер модели entity Data Model. На первом шаге мастера по умолчанию выбран параметр Создать из базы данных . Щелкните Далее.

Image06

На шаге Выбор подключения к данным оставьте значения по умолчанию и нажмите кнопку Далее. База данных School выбрана по умолчанию, и параметр подключения сохраняется в файлеWeb.config как SchoolEntities.

Image07

На шаге мастера Выбор объектов базы данных выберите все таблицы, кроме sysdiagrams (которые были созданы для созданной ранее схемы) и нажмите кнопку Готово.

Image08

После завершения создания модели Visual Studio отобразит графическое представление объектов (сущностей) Entity Framework, соответствующих таблицам базы данных. (Как и на схеме базы данных, расположение отдельных элементов может отличаться от того, что вы видите на этом рисунке. При желании можно перетащить элементы в соответствии с иллюстрацией.)

Image09

Изучение модели данных Entity Framework

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

  • Связь "один к нулю или одному" представлена "1" и "0..1".

    Изображение39

    В этом случае сущность может быть связана Person с сущностью или не может быть связана с ней OfficeAssignment . Сущность OfficeAssignment должна быть связана с сущностью Person . Другими словами, инструктор может быть назначен в офис, а любой офис может быть назначен только одному преподавателю.

  • Связь "один ко многим" представлена "1" и "*".

    Изображение40

    В этом случае Person сущность может иметь или не иметь связанных StudentGrade сущностей. Сущность StudentGrade должна быть связана с одной Person сущностью. StudentGrade сущности фактически представляют зарегистрированные курсы в этой базе данных; Если учащийся зачислен в курс и еще нет оценки, Grade свойство имеет значение NULL. Другими словами, учащийся может быть еще не зачислен на какие-либо курсы, может быть зачислен в один курс или может быть зарегистрирован в нескольких курсах. Каждый балл в зачисленном курсе применяется только к одному учащемуся.

  • Связь "многие ко многим" представлена символами "*" и "*".

    Изображение41

    В этом случае Person сущность может иметь или не иметь связанных Course сущностей, и верно и обратное: Course сущность может иметь или не иметь связанных Person сущностей. Другими словами, преподаватель может преподавать несколько курсов, а курс может преподавать несколько инструкторов. (В этой базе данных эта связь применяется только к преподавателям; она не связывает учащихся с курсами. Учащиеся связаны с курсами в таблице StudentGrades.)

Еще одним различием между схемой базы данных и моделью данных является дополнительный раздел Свойства навигации для каждой сущности. Свойство навигации сущности ссылается на связанные сущности. Например, Courses свойство в сущности Person содержит коллекцию всех сущностей Course , связанных с этой Person сущностью.

Изображение12

Еще одно различие между базой данных и моделью данных заключается в отсутствии таблицы сопоставлений CourseInstructor , которая используется в базе данных для связывания Person таблиц и Course в связи "многие ко многим". Свойства навигации позволяют получать связанные Course сущности из сущности Person и связанные Person сущности из Course сущности, поэтому нет необходимости представлять таблицу сопоставлений в модели данных.

Изображение11

Для целей этого руководства предположим, что FirstName столбец Person таблицы на самом деле содержит имя и отчество пользователя. Вы хотите изменить имя поля в соответствии с этим, но администратор базы данных (DBA) может не захотеть изменять базу данных. Вы можете изменить имя FirstName свойства в модели данных, оставив его эквивалент базы данных без изменений.

В конструкторе щелкните правой кнопкой мыши имя в сущности Person и выберите команду Переименовать.

Изображение13

Введите новое имя FirstMidName. Это изменяет способ ссылки на столбец в коде без изменения базы данных.

Изображение 29

Браузер моделей предоставляет другой способ просмотра структуры базы данных, структуры модели данных и сопоставления между ними. Чтобы просмотреть его, щелкните правой кнопкой мыши пустую область в конструкторе сущностей и выберите пункт Обозреватель моделей.

Изображение18

На панели Обозреватель моделей отображается представление в виде дерева. (Область Обозреватель моделей может быть закреплена с областью Обозреватель решений.) Узел SchoolModel представляет структуру модели данных, а узел SchoolModel.Store представляет структуру базы данных.

Изображение26

Разверните SchoolModel.Store , чтобы просмотреть таблицы, разверните узел Таблицы и представления , чтобы просмотреть таблицы, а затем — Узел Курс , чтобы просмотреть столбцы в таблице.

Изображение19

Разверните Узел SchoolModel, Типы сущностей, а затем узел Курс , чтобы просмотреть сущности и свойства в сущностях.

Изображение 20

В области конструктора или обозревателя моделей можно увидеть, как Entity Framework связывает объекты двух моделей. Щелкните правой Person кнопкой мыши сущность и выберите Сопоставление таблиц.

Изображение21

Откроется окно Сведения о сопоставлении . Обратите внимание, что в этом окне можно увидеть, что столбец FirstName базы данных сопоставлен с FirstMidName, который вы переименовали в модель данных.

Изображение22

Entity Framework использует XML для хранения сведений о базе данных, модели данных и сопоставлениях между ними. Файл SchoolModel.edmx фактически является XML-файлом, содержащим эти сведения. Конструктор отображает информацию в графическом формате, но вы также можете просмотреть файл в формате XML, щелкнув правой кнопкой мыши EDMX-файл в Обозреватель решений, выбрав команду Открыть с помощью и выбрав редактор XML (текст). (Конструктор моделей данных и редактор XML — это всего лишь два разных способа открытия одного файла и работы с ним, поэтому конструктор не может одновременно открывать и открывать файл в редакторе XML.)

Вы создали веб-сайт, базу данных и модель данных. В следующем пошаговом руководстве вы приступите к работе с данными с помощью модели данных и элемента управления ASP.NET EntityDataSource .