Введение в Entity Framework 4.0, Database First и ASP.NET 4 Web Forms

Том Дайкстра

Пример веб-приложения Contoso University демонстрирует создание приложений веб-форм ASP.NET с помощью Entity Framework 4.0 и Visual Studio 2010. Пример приложения — это веб-сайт для вымышленного университета Contoso. На нем предусмотрены различные функции, в том числе прием учащихся, создание курсов и назначение преподавателей.

В этом руководстве показаны примеры в C#. Скачиваемый пример содержит код как в C#, так и в Visual Basic.

База данных в первую очередь

Существует три способа работы с данными в Entity Framework: База данных First, Model First и Code First. Это руководство предназначено для базы данных First. Сведения о различиях между этими рабочими процессами и рекомендациями по выбору лучшего для вашего сценария см. в разделе "Рабочие процессы разработки Entity Framework".

Веб-формы

В этой серии руководств используется модель веб-форм ASP.NET и предполагается, что вы знаете, как работать с ASP.NET веб-формами в 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 для Интернета. Руководство не было протестировано с помощью более поздних версий 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 Entity Entity, или StackOverflow.com.

Обзор

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

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

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

Image30

Image37

Image31

Image32

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

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

Image01

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

Image02

Откройте файл Site.Master и измените "Мое приложение ASP.NET" на "Университет Contoso".

<h1>
    Contoso University
</h1>

Найдите элемент управления Меню с именем 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 и измените элемент управления, названный ContentBodyContent следующим образом:

<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, щелкните правой кнопкой мыши схемы баз данных и выберите "Добавить новую схему".

    Image35

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

    Image36

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

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

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

Image38

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

Image04

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

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

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

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

Image05

Это запускает мастер модели данных сущностей. На первом шаге мастера параметр "Создать из базы данных " выбран по умолчанию. Нажмите кнопку Далее.

Image06

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

Image07

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

Image08

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

Image09

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

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

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

    Image39

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

  • Ассоциация "один ко многим" представляется с помощью "1" и "*".

    Image40

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

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

    Image41

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

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

Image12

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

Image11

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

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

Image13

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

Image29

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

Image18

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

Image26

Разверните SchoolModel.Store, чтобы просмотреть таблицы, разверните Таблицы / Представления, чтобы просмотреть таблицы, а затем разверните Course, чтобы просмотреть столбцы в таблице.

Image19

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

Image20

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

Image21

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

Image22

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

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