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

1 2 3 [ 4 ] 5 6 7 8


public BookEntities(EntityConnection connection) :

base(connection, BookEntities ) { } [BrowsableAttribute(false)] public ObjectQuery<Author> Authors {

if ((this. Authors == null)) {

this. Authors = base.CreateQuery<Author>( [Authors] );

return this. Authors;

private ObjectQuery<Author> Authors; [BrowsableAttribute(false)]

public ObjectQuery<Book> Books {

if ((this. Books == null)) {

this. Books = base.CreateQuery<Book>( [Books] );

return this. Books; }

private ObjectQuery<Book> Books; public void AddToAuthors(Author author) {

base.AddObject( Authors , author);

public void AddToBooks(Book book) {

base.AddObject( Books , book);

В случае, когда вы передаете строку соединения конструктору класса BookEntities, строка соединения типа EntityConnection определяет ключевое слово Metadata, которое требует трех вещей: списка с разделителями отображаемых файлов, Provider - для инвариантного имени поставщика для доступа к источнику данных, и строки соединения Provider для присвоения зависящей от поставщика строки соединения.

EntityConnection conn = new EntityConnection(

Metadata=./BookModel.csdl./BookModel.ssdl./BookModel.msl; + Provider=System.Data.SqlClient; +

Provider connection string=\ Data Source=(local); + Initial Catalog=EntitiesDemo;Integrated Security=True\ );

Класс ObjectContext предлагает несколько услуг вызывающему коду.

□ Отслеживает сущностные объекты, которые уже извлечены. Если объект запрашивается снова, он берется из контекста объектов.

□ Хранит информацию состояния сущностей. Вы можете получить информацию о добавленных, модифицированных и удаленных объектах.

□ Вы можете обновлять объекты из контекста объектов для записи изменений в лежащее в основе хранилище.

Методы и свойства класса ObjextContext перечислены в табл. А.3.



Таблица А.3. Методы и свойства класса ObjextContext

Методы и свойства ObjectContext

Connection

MetadataWorkspace QueryTimeout

ObjectStateManager

CreateQuery()

GetObjectByKey() TryGetObjectByKey()

AddObject()

DeleteObject() Detach()

Attach()

AttachTo()

ApplyPropertyChanges()

Описание

Refresh()

SaveChanges()

AcceptAllChanges()

Возвращает объект DbConnection, ассоциированный с объектным контекстом.

Возвращает объект MetadataWorkspace, который может быть использован для чтения метаданных и информации отображения.

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

Это свойство возвращает ObjectStateManager. Объект ObjectStateManager отслеживает извлеченные сущностные объекты и изменения объектов в объектном контексте.

Этот метод возвращает ObjectQuery для получения данных из хранилища. Свойства Books и Authors, показанные ранее, используют этот метод для возврата ObjectQuery.

Эти методы возвращают объект по ключу - либо от диспетчера состояния объектов, либо от лежащего в основе хранилища. GetObjectByKey() генерирует исключение типа

ObjectNotFoundException, если ключ не существует. TryGetObjectByKey() возвращает false.

Этот метод добавляет новый сущностный объект в объектный контекст. Этот метод вызывается методами AddToAuthors() и AddToBooks().

Этот метод удаляет объект из объектного контекста.

Этот метод отсоединяет сущностный объект от объектного контекста, так что его изменения с этого момента не отслеживаются.

Метод Attach() присоединяет отсоединенный объект к хранилищу. Повторное присоединение объектов к объектному контексту требует, чтобы сущностный объект реализовывал интерфейс IEntityWithKey. Метод AttachTo() не предъявляет требования наличия ключа у объекта, но требует установки имени сущности, к которой сущностный объект должен быть присоединен.

Если объект отсоединяется от объектного контекста, затем отсоединенный объект модифицируется, после чего изменения должны быть применены к объекту внутри объектного контекста, вы можете вызвать метод ApplyPropertyChanges() для применения изменений. Это удобно в сценарии, когда отсоединенный объект был возвращен Web-службой, изменен в клиенте и передан Web-службе в модифицированном виде.

Данные в хранилище могут измениться, пока сущностные объекты находятся внутри объектного контекста. Чтобы выполнить обновление объектов по информации хранилища, вы можете передать значение перечисления RefreshMode. Если значения объектов не совпадают в хранилище и объектном контексте, передача значения ClientWins изменяет данные в хранилище. Значение StoreWins изменяет данные в объектном контексте.

Добавление, модификация и удаление объектов из объектного контекста не изменяет объекта в лежащем в основе хранилище. Используйте метод SaveChanges() для сохранения изменений в хранилище.

Этот метод изменяет состояние объектов в контексте на немодифици-рованное. SaveChanges() вызывает данный метод неявно.



Отношения

Сущностные типы Book и Author связаны между собой. Книга пишется одним или более авторами, и автор может написать одну или более книг. Отношения между ними базируются на количестве типов, с которыми они связаны, и множественности (multiplicity). Первая версия ADO.NET Entity Framework поддерживает 2 количества типов на таблицу: таблица на тип (Table per Type - TPT) и таблица на иерархию (Table per Hierarchy - TPH). Множественность может быть трех разновидностей: один к одному, один ко многим и многие ко многим.

Таблица на иерархию

При TPH существует одна таблица в базе данных, соответствующая иерархии сущностных классов. Таблица базы данных Payments (рис. A.3) содержит столбцы для иерархии сущностных типов. Некоторые столбцы являются общими для всех сущностей в иерархии - такие как Id и Amount. Столбец CreditCard используется только платежом с помощью кредитной карты.


Рис. А.3. Таблицей Payments

Сущностные классы, отображаемые на одну таблицу Payments, показаны на рис. А.4. Payment - абстрактный базовый класс, содержащий свойства, общие для всех типов в иерархии. Конкретные классы, наследуемые от Payment - это CreditCardPayment, CashPayment и ChequePayment. Класс CreditCardPayment в дополнение к свойствам базового класса имеет свойство CreditCard; класс ChequePayment имеет свойство BankName.


Рис. А.4. Иерархия классов, унаследованных от Payment



1 2 3 [ 4 ] 5 6 7 8

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