Помогите понять EntitySets, AssociationSets, EntityContainer
От: Аноним  
Дата: 20.10.08 18:20
Оценка:
Перечитываю вот MSDN вот в который раз и до конца не догоняю назначения этих объектов. EntitySets, как я понял, типа коллекции EntityType-ов, но причем несколько колекция для одного типа могут быть, а вот один экземпляр Entity не может входить в 2 коллекции. AssociationSets — это коллекция Association, но вот суть и предназначения этого я не понял. EntityContainer какбы все содержит, но опять же не совсем понятно зачем там повторяется описание ассоциаций.
Re: Помогите понять EntitySets, AssociationSets, EntityConta
От: stump http://stump-workshop.blogspot.com/
Дата: 21.10.08 05:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Перечитываю вот MSDN вот в который раз и до конца не догоняю назначения этих объектов. EntitySets, как я понял, типа коллекции EntityType-ов, но причем несколько колекция для одного типа могут быть, а вот один экземпляр Entity не может входить в 2 коллекции. AssociationSets — это коллекция Association, но вот суть и предназначения этого я не понял. EntityContainer какбы все содержит, но опять же не совсем понятно зачем там повторяется описание ассоциаций.


EntitySet — в runtime это действительно коллекция, только не типов а экземпляров объектов, в designtime (в EDM) — это логический контейнер для типов объектов. С AssociationSet примерно тоже самое.
EntityObject — это экземпляр персистентного объекта (напр, объект с данными о конкретном человеке Васе Пупкине)
EntityType — это описание типа этого персистентного объекта (напр, тип Персона)
EntitySet — это контейнер для объектов EntityType и его наследников (напр, Персоны — все объекты Персоны).
EntityContainer — это общий контейнер для всей логической модели данных (в runtime он представлен ObjectContext-ом в котором живут все экземпляры объектов вытянутые из БД).

Теперь об отношениях между ними.
Экземпляр EntityObject может принадлежать только одному EntitySet.
EntitySet является контейнером не только для конкретного EntityType но и для всех унаследованных от него типов (напр, Персоны это сет для типа Персона и его наследников, типов Студент и Преподаватель).
Один EntityType может входить в несколько EntitySet (например тип Персона может входить в сеты Сотрудники и Клиенты, если переводить в термины БД, то это равнозначно ситуации, когда у вас есть две таблицы совершенно одинаковой структуры). Но конкретный экземпляр принадлежит только одному EntitySet-у.

Все это специфика, накладываемая персистентностью объектов.
Понедельник начинается в субботу
ef
Re[2]: Помогите понять EntitySets, AssociationSets, EntityCo
От: Аноним  
Дата: 21.10.08 08:46
Оценка:
Здравствуйте, 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, но только как-бы связи прописываются не между типами, а между коллекциями.
Re[3]: Помогите понять EntitySets, AssociationSets, EntityCo
От: stump http://stump-workshop.blogspot.com/
Дата: 21.10.08 12:39
Оценка:
Здравствуйте, Аноним, Вы писали:


А> А возможно, чтобы часть EntityObject-оа одного EntityType-а была в одном EntitySet, а часть — в другом. Например, все персоны, у воторых фамилия начинается с гласной — в одном наборе EntitySet, а остальные — в другом. И какой в этом может быть смысл в плане предназначения? В каких случаях может понадобиться такое разделение?


Замечательный вопрос. Больше всего мне постановка нравится.
Понедельник начинается в субботу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.