Перечитываю вот MSDN вот в который раз и до конца не догоняю назначения этих объектов. EntitySets, как я понял, типа коллекции EntityType-ов, но причем несколько колекция для одного типа могут быть, а вот один экземпляр Entity не может входить в 2 коллекции. AssociationSets — это коллекция Association, но вот суть и предназначения этого я не понял. EntityContainer какбы все содержит, но опять же не совсем понятно зачем там повторяется описание ассоциаций.
Здравствуйте, Аноним, Вы писали:
А>Перечитываю вот 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-у.
Все это специфика, накладываемая персистентностью объектов.
Здравствуйте, 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 с нодом "Association" вполне понятен — он прописывает отношение с двуми "концами" и описывает функционал каждого из концов. А вот предназначения AssociationSet не совсем понятно. Описание похоже на описание Association, но только как-бы связи прописываются не между типами, а между коллекциями.
А> А возможно, чтобы часть EntityObject-оа одного EntityType-а была в одном EntitySet, а часть — в другом. Например, все персоны, у воторых фамилия начинается с гласной — в одном наборе EntitySet, а остальные — в другом. И какой в этом может быть смысл в плане предназначения? В каких случаях может понадобиться такое разделение?
Замечательный вопрос. Больше всего мне постановка нравится.