|
Программирование >> Каркас сущностей ado.net
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |