Программирование >>  Каркас сущностей ado.net 

[ 1 ] 2 3 4 ... 8


Каркас сущностей ADO.NET (ADO.NET Entity Framework) - объектно-реляционный каркас отображения, основанный на .NET 3.5. В главе 27 мы продемонстрировали объектно-реляционное отображение посредством LINQ to SQL. LINQ to SQL предоставляет простое средство отображения для отношений ассоциации и наследования. ADO. NET Entity Framework предлагает намного больше опций для отражения ассоциации и наследования. Другое отличие между LINQ to SQL и ADO.NET Entity Framework состоит в том, что ADO.NET Entity Framework представляет собой модель на основе поставщиков, позволяющую подключаться к ней другим поставщикам баз данных.

В настоящем приложении рассматриваются следующие темы:

□ каркас сущностей ADO.NET;

□ уровни каркаса сущностей;

□ сущности;

□ объектные контексты;

□ отношения;

□ запросы объектов;

□ обновления;

□ LINQ to Entities.

Настоящее приложение основано на версии Beta 3 этого каркаса, которая вышла несколькими месяцами позже продукта .NET 3.5, поэтому некоторые имена методов и классов могут отличаться от тех, что вы встретите здесь.

В этом приложении используются базы данных Books, Formula 1 и Northwind. Вы можете загрузить базу Northwind с msdn.microsoft.com; базы Books и Formula 1 входят в состав кода примеров для книги.

Обзор ADO.NET Entity Framework

ADO.NET Entity Framework обеспечивает отображение схемы реляционной базы данных на объекты. Реляционные базы данных и объектно-ориентированные языки определяют ассоциации по-разному. Например, база примеров Microsoft Northwind со-



держит таблицы Customers и Orders. Чтобы получить доступ ко всем строкам Orders определенного заказчика, вы должны составить SQL-оператор соединения. В объектно-ориентированных языках принято определять классы Customer и Order и обращаться к заказам заказчика через свойство Orders класса Customer.

Со времен .NET 1.0 для объектно-реляционного отображения можно было использовать класс DataSet и типизированные множества данных. Множества данных (data-sets) очень похожи на структуры баз данных, содержащие классы DataTable, DataRow, DataColumn и DataRelation. AdO.NET Entity Framework обеспечивает поддержку явно определенных сущностных классов, которые полностью независимы от структуры базы данных и отображают их на таблицы и ассоциации базы данных. Использование в приложении объектов защищает приложение от изменений в базе данных.

ADO.NET Entity Framework использует Entity SQL для определения запросов к хранилищу на основе сущностей. LINQ to Entities дает возможность применять синтаксис LINQ для опроса данных.

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

Пространства имен, содержащие классы ADO.NET Entity Framework, перечислены в табл. А.1.

Таблица А.1. Пространства имен, содержащие классы ADO.NET Entity Framework

Пространство имен

System.Data

System.Data.Common

System.Data.Common.CommandTrees

System.Data.Entity.Design

System.Data.EntityClient

System.Data.Objects

Описание

System.Data.Objects.DataClasses

Это главное пространство имен ADO.NET.

Для ADO.NET Entity Framework это пространство содержит

классы исключений, относящихся к сущностям, например,

MappingException и QueryException.

Это пространство имен содержит классы, разделяемые

поставщиками данных .NET. Класс DbProviderServices -

абстрактный базовый класс, который может быть реализован поставщиком ADO.NET Entity Framework.

Это пространство имен содержит классы для построения дерева выражений.

Это пространство имен содержит классы, используемые дизайнером для создания файлов сущностной модели данных - Entity Data Model (EDM).

Это пространство имен специфицирует классы .NET Framework Data Provider для доступа к Entity Framewrok.

EntityConnection, EntityCommand и EntityDataReader могут применяться для доступа к Entity Framework.

Пространство имен содержит классы для опроса и обновления баз данных. Класс ObjectContext инкапсулирует соединение с базой данных и служит шлюзом для методов создания, чтения, обновления и удаления. Класс ObjectQuery представляет запрос к хранилищу, а CompiledQuery - кэшированный запрос.

Пространство имен, содержащее классы и интерфейсы, необходимые сущностям.



Уровни каркаса сущностей

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

Уровни, которые должны быть определены:

□ логический - этот уровень определяет реляционные данные;

□ концептуальный - этот уровень определяет классы .NET;

□ отображения - этот уровень определяет отображение классов .NET на реляционные таблицы и ассоциации.

Начнем с простой схемы базы данных, показанной на рис. А.1, с таблицами Books и Authors, а также таблицу ассоциации BookAuthors, которая отображает авторов на


Рис. А.1. Пример схемы базы данных

Логический уровень

Логический уровень определен на языке SSDL (Store Schema Definition Language - язык определения схемы хранилища) и определяет структуру таблиц базы данных и их отношений.

Следующий код использует SSDL для описания трех таблиц: Books, Authors и BookAuthors. Элемент EntityContainer описывает все таблицы в виде элементов EntitySet, а ассоциации - в виде элементов AssociationSet. Части таблицы определяются элементом EntityType. В EntityType по имени Books вы можете видеть столбцы Id, Title и Publisher, определенные элементом Property. Элемент Property содержит атрибуты XML для определения типа данных. Элемент Key определяет ключ таблицы.

<Schema Namespace= BookEntities.Store Alias= Self ProviderManifestToken= 09.00.3054

xmlns= http: schemas.microsoft.com/ado/2 00 6/04/edm/ssdl > <EntityContainer Name= dbo > <EntitySet Name= Authors EntityType= Wrox.ProCSharp.Entities.Store.Authors /> <EntitySet Name= BookAuthors

EntityType= Wrox.ProCSharp.Entities.Store.BookAuthors /> <EntitySet Name= Books EntityType= Wrox.ProCSharp.Entities.Store.Books />



[ 1 ] 2 3 4 ... 8

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика