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

ОГЛАВЛЕНИЕ

Производные сущности

Те же средства, что помогают при проектировании сущностной модели, позволяют ее изменять. В объектно-ориентированном программировании понятие наследования является одним из основных. Модель EDM поддерживает создание и изменение производных сущностей — как непосредственно в коде XML, так и в наглядной форме в конструкторе EDM.

Чтобы проиллюстрировать процесс разработки производных сущностей, мы создадим тип EntityType DiscontinuedProduct на основе типа EntityType Product. Тип EntityType Product имеет скалярное свойство Discontinued, принимающее значения логического типа. Его мы используем в качестве условия, определяющего принадлежность каждого отдельно взятого продукта к тому или иному типу экземпляров. В конструкторе EDM мы щелкаем правой кнопкой мыши и во всплывшем меню выбираем пункт «Добавить» > «Сущность». Затем мы вводи имя новой сущности — DiscontinuedProduct — и выбираем сущность Product в качестве базовой (см. рис. 7).

 

Рис. 7 Создание унаследованной сущности 

На следующем этапе нам нужно определить фактор различения этих сущностей, что делается при помощи условия. Мы выбираем в конструкторе тип EntityType Product и открываем окно свойств сопоставления сущностей. В столбце сопоставлений мы выбираем свойство Discontinued и удаляем сопоставление. При этом свойство Discontinued удаляется как из типа Product, так и из типа DiscontinuedProduct (выражение, участвующее в создании условия, не должно использоваться в качестве свойства). Затем мы переходим к разделу Maps to Products в окне свойств сопоставления сущностей и добавляем условие Condition of Discontinued = 0. После этого выбираем тип DiscontinuedProduct и добавляем условие Condition of Discontinued = 1.

Создание производных сущностей таким методом действительно не вызывает сложностей. Если необходимо, вы можете добавить производной сущности дополнительные свойства, которых нет у базового класса. Когда вы создаете экземпляр DiscontinuedProduct в коде .NET и сохраняете его, платформа Entity Framework в столбце Discontinued устанавливает значение 0 в соответствии с существующим условием.

Условия создаются в разделе EntityTypeMapping в коде MSL. Они фактически просто устанавливают фильтр на получение строк. При сохранении данных условия используются для того, чтобы определить, какое значение записать в столбец базы данных, основанный на производном типе.

Выводы

Средства конструирования, включенные в Visual Studio 2008, и файлы XML позволяют создать сущностную модель данных, в которой будет использоваться наследование и применяться хранимые процедуры, — модель, позволяющую сосредоточиться на бизнес-процессах, вместо того чтобы писать код непосредственно на основании схемы реляционной базы данных. После того как сущностная модель полностью оформлена, взаимодействие с ней через интерфейсы API, такие как службы объектов, проблем не вызывает. Кроме того, при изменении модели данных вам не придется вносить изменения в базу данных, поскольку сопоставления позволяют обособить концептуальную модель от модели хранилищ.

Джон Папа — старший консультант по технологии .NET в компании ASPSOFT и страстный поклонник бейсбола, который почти все летние вечера проводит, болея за «Янки» со своим семейством и верным псом Кади. Джон, имея звание MVP по C#, является автором нескольких книг по ADO, XML и SQL Server.