Здравствуйте, stump, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Перечитываю вот MSDN вот в который раз и до конца не догоняю назначения этих объектов. EntitySets, как я понял, типа коллекции EntityType-ов, но причем несколько колекция для одного типа могут быть, а вот один экземпляр Entity не может входить в 2 коллекции. AssociationSets — это коллекция Association, но вот суть и предназначения этого я не понял. EntityContainer какбы все содержит, но опять же не совсем понятно зачем там повторяется описание ассоциаций.
S>EntitySet — в runtime это действительно коллекция, только не типов а экземпляров объектов, в designtime (в EDM) — это логический контейнер для типов объектов. С AssociationSet примерно тоже самое.
S>EntityObject — это экземпляр персистентного объекта (напр, объект с данными о конкретном человеке Васе Пупкине)
S>EntityType — это описание типа этого персистентного объекта (напр, тип Персона)
S>EntitySet — это контейнер для объектов EntityType и его наследников (напр, Персоны — все объекты Персоны).
S>EntityContainer — это общий контейнер для всей логической модели данных (в runtime он представлен ObjectContext-ом в котором живут все экземпляры объектов вытянутые из БД).
S>Теперь об отношениях между ними.
S>Экземпляр EntityObject может принадлежать только одному EntitySet.
S>EntitySet является контейнером не только для конкретного EntityType но и для всех унаследованных от него типов (напр, Персоны это сет для типа Персона и его наследников, типов Студент и Преподаватель).
S>Один EntityType может входить в несколько EntitySet (например тип Персона может входить в сеты Сотрудники и Клиенты, если переводить в термины БД, то это равнозначно ситуации, когда у вас есть две таблицы совершенно одинаковой структуры). Но конкретный экземпляр принадлежит только одному EntitySet-у.
S>Все это специфика, накладываемая персистентностью объектов.
А возможно, чтобы часть EntityObject-оа одного EntityType-а была в одном EntitySet, а часть — в другом. Например, все персоны, у воторых фамилия начинается с гласной — в одном наборе EntitySet, а остальные — в другом. И какой в этом может быть смысл в плане предназначения? В каких случаях может понадобиться такое разделение?
И все же немного непонятно по поводу AssociationSet. Вот пример из MSDN.
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="http://schemas.microsoft.com/ado/2006/04/edm"
xmlns="http://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.LOBSchema" Alias="Self">
<EntityType Name="Customer">
<Key>
<Property Name="CustomerId" Type="Int32" Nullable="false" />
</Key>
<!-- Other properties -->
</EntityType>
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="Int32" Nullable="false" />
<!-- Other properties -->
</EntityType>
<Association Name="CustomerOrderType">
<End Role="Orders" Type=" Self.Customer" Multiplicity="1" />
<End Role="OrderedBy" Type=" Self.Order" Multiplicity="0..*" />
</Association>
<EntityContainer Name="ContainerType">
<EntitySet Name="CustomerSet" EntityType=" Self.Customer" />
<EntitySet Name="OrderSet" EntityType=" Self.Order" />
<AssociationSet Name="CustomerOrderSet" Association=" Self.CustomerOrderType">
<End Role="Orders" EntitySet=" Self.CustomerSet" />
<End Role="OrderedBy" EntitySet=" Self.OrderSet" />
</AssociationSet>
</EntityContainer>
</Schema>
Кусок в XML с нодом "Association" вполне понятен — он прописывает отношение с двуми "концами" и описывает функционал каждого из концов. А вот предназначения AssociationSet не совсем понятно. Описание похоже на описание Association, но только как-бы связи прописываются не между типами, а между коллекциями.