Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пример веб-приложения 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.
Версии программного обеспечения
Вопросы
Если у вас есть вопросы, которые не связаны напрямую с руководством, их можно опубликовать на форуме ASP.NET Entity Framework, форуме Entity Framework и LINQ to Entity Entity, или StackOverflow.com.
Обзор
Приложение, которое вы будете создавать в этих руководствах, является простым веб-сайтом университета.
Пользователи приложения могут просматривать и обновлять сведения об учащихся, курсах и преподавателях. Ниже показаны несколько экранов, которые вы создадите.
Создание веб-приложения
Чтобы запустить учебник, откройте Visual Studio и создайте проект веб-приложения ASP.NET с помощью шаблона веб-приложения ASP.NET :
Этот шаблон создает проект веб-приложения, который уже содержит таблицу стилей и главные страницы:
Откройте файл 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>
Теперь у вас есть простая домашняя страница со ссылками на различные страницы, которые вы создадите:
Создание базы данных
В этих руководствах вы будете использовать дизайнер модели данных 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 , назовите его SchoolModel.edmx и нажмите кнопку "Добавить".
Это запускает мастер модели данных сущностей. На первом шаге мастера параметр "Создать из базы данных " выбран по умолчанию. Нажмите кнопку Далее.
На шаге выбора подключения к данным оставьте значения по умолчанию и нажмите кнопку "Далее". База данных 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, чтобы просмотреть таблицы, разверните Таблицы / Представления, чтобы просмотреть таблицы, а затем разверните Course, чтобы просмотреть столбцы в таблице.
Разверните SchoolModel, разверните Типы сущностей, а затем разверните узел Course, чтобы просмотреть сущности и свойства в сущностях.
В панели конструктора или браузера модели вы можете увидеть, как Entity Framework объединяет объекты двух моделей. Щелкните правой Person кнопкой мыши сущность и выберите "Сопоставление таблиц".
Откроется окно сведений о сопоставлении . Обратите внимание, что это окно позволяет увидеть, что столбец FirstName базы данных сопоставляется с FirstMidName, как вы его переименовали в модели данных.
Entity Framework использует XML для хранения сведений о базе данных, модели данных и сопоставлениях между ними. Файл SchoolModel.edmx фактически представляет собой XML-файл, содержащий эти сведения. Конструктор отображает сведения в графическом формате, но вы также можете просмотреть файл как XML, щелкнув правой кнопкой мыши файл edmx в обозревателе решений, щелкнув "Открыть с помощью" и выбрав редактор XML (текст). (Конструктор моделей данных и редактор XML—это всего два разных способа открытия и работы с тем же файлом, поэтому конструктор не может открыть и открыть файл в редакторе XML одновременно.)
Теперь вы создали веб-сайт, базу данных и модель данных. В следующем пошаговом руководстве вы начнете работу с данными с помощью модели данных и элемента управления ASP.NET EntityDataSource .