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

1 2 [ 3 ] 4 5 6 ... 8


[EdmEntityTypeAttribute(NamespaceName= Wrox.ProCSharp.Entities , Name= Book )]

[DataContractAttribute()]

[Serializable()]

public partial class Book : global::System.Data.Objects.DataClasses.EntityObject

public static Book CreateBook(int ID, string title, string publisher) {

Book book = new Book(); book.Id = ID; book.Title = title;

book.Publisher = publisher; return book;

[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]

[DataMemberAttribute()]

public int Id

return this. Id; }

set {

this.OnIdChanging(value); this.ReportPropertyChanging( Id );

this. Id = StructuralObject.SetValidValue(value);

this.ReportPropertyChanged( Id );

this.OnIdChanged();

private int Id;

partial void OnIdChanging(int value); partial void OnIdChanged(); [EdmScalarPropertyAttribute(IsNullable=false)] [DataMemberAttribute()]

public string Title {

get {

return this. Title;

set {

this.OnTitleChanging(value); this.ReportPropertyChanging( Title );

this. Title = StructuralObject.SetValidValue(value, false, 50);

this.ReportPropertyChanged( Title );

this.OnTitleChanged();

private string Title;

partial void OnTitleChanging(string value); partial void OnTitleChanged();

[EdmScalarPropertyAttribute(IsNullable=false)] [DataMemberAttribute()] public string Publisher

get {



AuthorBook ,

this.OnPublisherChanging(value); this.ReportPropertyChanging( Publisher );

this. Publisher = StructuralObject.SetValidValue(value, false, 50); this.ReportPropertyChanged( Publisher );

this.OnPublisherChanged();

private string Publisher;

partial void OnPublisherChanging(string value); partial void OnPublisherChanged();

[EdmRelationshipNavigationPropertyAttribute( BookDemoEntities

Author )]

[XmlIgnoreAttribute()] [SoapIgnoreAttribute()] [BrowsableAttribute(false)]

public EntityCollection<Author> Authors

get {

return ((IEntityWithRelationships)(this)).RelationshipManager.

GetRelatedCollection<Author>( WroxProCSharp.Entities.AuthorBook Author );

Классы и интерфейсы, важные для сущностных классов, объясняются в табл. А.2. За исключением INotifyPropertyChanging и INotifyPropertyChanged, типы определены в пространстве имен System.Data.Objects.DataClasses.

Таблица A.2. Классы и интерфейсы, имеющие отношение к сущностным классам

Класс или интерфейс

StructuralObject

INotifyPropertyChanging INotifyPropertyChanged

EntityObject

ComplexObject

IEntityWithKey

Описание

StructuralObject - базовый класс для классов EntityObject и ComplexObject. Этот класс реализует интерфейсы

INotifyPropertyChanging и INotifyPropertyChanged.

Эти интерфейсы определяют события PropertyChanging

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

System.ComponentModel.

Этот класс наследуется от StructuralObject и реализует интерфейсы IEntityWithKey, IEntityWithChangeTracker и IEntityWithRelationships. EntityObject - часто используемый базовый класс для объектов, отображенных на таблицы базы данных, содержащих ключ и отношения с другими объектами.

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

Этот интерфейс определяет свойство EntityKey, обеспечивающее быстрый доступ к объекту.



Окончание табл. A.2

Класс или интерфейс Описание

IEntityWithChangeTracker Этот интерфейс определяет метод SetChangeTracker(), в котором может быть назначено средство отслеживания изменений, реализующее интерфейс IChangeTracker, чтобы получать информацию об изменении состояния от объекта.

IEntityWithRelationships Этот интерфейс определяет доступное только на чтение

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

Для сущностного класса не обязательно наследоваться от базового класса EntityObject или ComplexObject. Вместо этого сущностный класс может реализовать необходимые интерфейсы.

Сущностный класс Book может быть легко доступен посредством класса контекста объектов BookEntities. Свойство Books возвращает коллекцию объектов Book, по которым может быть выполнена итерация:

BookEntities data = new BookEntities(); foreach (var book in data.Books)

Console.WriteLine( {0}, {1} , book.Title, book.Publisher);

Работающая программа запрашивает книги из базы данных и отображает их на консоли:

Professional C# 2008, Wrox Press Beginning Visual C# 2008, Wrox Press

Working with Animation in Silverlight 1.0, Wrox Press Professional WPF Programming, Wrox Press

Контекстный объект

Чтобы извлечь данные из базы, необходим класс ObjectContext. Этот класс определяет отображение сущностных объектов на базу данных. В ADO.NET вы можете сравнить этот класс с адаптером данных, заполняющим DataSet.

Класс BookEntities, созданный дизайнером, наследуется от базового класса ObjectContext. Этот класс добавляет конструкторы, принимающие строку соединения. В конструкторе по умолчанию строка соединения читается из конфигурационного файла. Можно также передавать конструктору уже открытое соединение в форме экземпляра EntityConnection. Если вы передадите конструктору соединение, которое не было открыто, контекст объектов откроет и закроет соединение; если вы передадите открытое соединение, вы также должны будете закрыть его.

Созданные классы определяют свойства Books и Authors, возвращающие ObjectQuery, и методы для добавления авторов и книг - AddToAuthors() и AddToBooks().

public partial class BookEntities : ObjectContext

public BookEntities() :

base( name=BookEntities , BookEntities ) { } public BookEntities(string connectionString) :

base(connectionString, BookEntities ) { }



1 2 [ 3 ] 4 5 6 ... 8

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