Разработка сущностной модели данных с помощью Entity Framework - Окна, используемые при работе с EDM

ОГЛАВЛЕНИЕ

Окна, используемые при работе с EDM

После того, как модель EDM спроектирована и построена, можно контролировать ее состояние при помощи различных окон. Окно «Представление классов» (см. рис. 5), которое существовало и раньше, помогает определить, какие объекты имеются в распоряжении разработчика. Например, в нем будет отображаться созданный нами метод GetTenMostExpensiveProducts для класса EntityContainer в модели NWEntities, а также все классы, имеющиеся в пространстве имен NWModel. В этот список входит по одному классу на каждый тип EntityType в коде CSDL плюс один класс для всей модели NWEntities.

 

Рис. 5 EDM в представлении классов 

В платформе также появилось несколько новых окон, предоставляющих сведения о сущностной модели и связанных с ней сопоставлениях. К ним относится конструктор EDM, окно сведений о сопоставлениях сущностей и окно просмотра сущностной модели.

В окне просмотра сущностной модели содержатся все компоненты CSDL и SSDL, в том числе EntityTypes, Associations, EntitySets, AssociationsSets и Function Imports (компоненты CSDL), а также все элементы SSDL.

В конструкторе EDM (см. рис. 6) показывается схема модели, созданной разработчиком. Здесь все элементы концептуальной модели представлены наглядным образом. Разработчик может просматривать модель и управлять ею. Обратите внимание на сущность Product, показанную на рис. 6 — она соответствует типу Product EntityType в CSDL. Каждый тип EntityType имеет список свойств — как скалярных, так и навигационных.

 

Рис. 6 Конструктор сущностной модели данных

Навигационные свойства используются при переходе по связям CSDL. Навигационные свойства становятся общими свойствами соответствующего класса EntityType и используются для ссылки на другую сущность или набор сущностей, связанный с исходной сущностью. Допустим, тип EntityType Product имеет навигационное свойство Categories, которое ссылается на сущность Category, относящуюся к конкретному экземпляру сущности Product. Тип EntityType Category, в свою очередь, имеет навигационное свойство Products. Существует оно для того, чтобы любой экземпляр сущности Category можно было связать с сущностями Product.

Конструктор позволяет добавлять, изменять и удалять типы сущностей, связи, скалярные и навигационные свойства. К примеру, можно привести имена всех типов EntityTypes к формам единственного числа — многие разработчики при именовании сущностей используют их как раз в таком виде. Для этого нужно щелкнуть имя типа EntityType и изменить его. Также имя типа EntityType можно изменить в окне свойств. В качестве примера мы привели имена всех типов EntityTypes к формам единственного числа — это можно видеть на рис. 6. После этого нам пришлось исправить код XML, в который мы до этого добавляли вызов хранимой процедуры в качестве метода для NWEntities EntityContainer. Это очень просто, нужно только обновить код таким образом, чтобы в нем упоминался тип EntityType Product (а не Products):

<FunctionImport Name="GetTenMostExpensiveProducts"
  EntitySet="Products"
  ReturnType="Collection(Self.Product)">
</FunctionImport>

Тут можно сделать немаловажный вывод о том, что основным элементам, таким как EntityType, EntityContainer и Association, имена лучше давать до изменения модели данных. Это сведет к минимуму число изменений, которые нужно будет вносить в код вручную. Это касается также того кода, который уже когда-то создавался на основании изменяемой модели данных. В случае возникновения проблем окно «Список ошибок» скорее всего должно помочь, постому что в нем наверняка будут содержаться указания на те элементы, для которых имеются неверные ссылки в коде XML.

И наконец, окно свойств сопоставлений сущностей (в отличие от конструктора, показывающего концептуальную модель) дает возможность просмотреть и изменить сопоставления (код MSL) между EDM и хранилищем данных.