ObjectStateManager и состояние объекта Detached

Я использую Entity Framework, и некоторые части его функциональности для меня до сих пор неясны. Основные моменты, которые трудно понять, это:

  • SubmitChanges процесс;
  • Порядок вызова методов обновления-удаления-вставки;
  • Понимание ObjectStateManager
  • Отдельный EntityState и его часть в процессе отправки;

Предоставьте свои объяснения или дайте несколько полезных ссылок.


person Anatolii Gabuza    schedule 14.11.2011    source источник


Ответы (1)


ObjectStateManager — это компонент, предоставляющий информацию об отслеживаемых объектах. Каждый объект, который может быть сохранен EF, должен быть отслежен = прикреплен. Отсоединенные объекты неизвестны EF (они не отслеживаются), поэтому их изменения не сохраняются при вызове SaveChanges (в EF нет SubmitChanges). Отслеживание состоит в поддержании информации об начальном состоянии объекта или отношения и изменениях, внесенных в них. Он также содержит глобальное состояние объекта.

Процесс, когда вы вызываете SaveChanges, зависит от того, как вы настроили EF для отслеживания изменений, от того, как вы получили сущность и от внесенных вами изменений.

Отслеживание изменений — это функция, которая позволяет EF отслеживать изменения, примененные к объектам, присоединенным к контексту (каждый объект, загруженный запросом, по умолчанию присоединен). EF содержит версию отслеживания изменений:

  • Снапшот — только для POCO. EF не отслеживает изменения в сущностях, но когда вы вызываете SaveChanges, он сравнивает сохраненное состояние сущности (полученное при загрузке сущности) и текущие данные в сущности и соответствующим образом устанавливает ее состояние.
  • Динамический — собственный для сущностей на основе EntityObject и достигается за счет динамических прокси-серверов для POCO. Каждое изменение прикрепленного объекта вызывает изменение в отслеживаемой записи и соответствующим образом устанавливает состояние объекта. Когда вы вызываете SaveChanges, состояния уже настроены.

Порядок операций модификации данных определяется внутренней реализацией EF. Базовый порядок определяется вашим сопоставлением, в котором описывается зависимость между сущностями.

person Ladislav Mrnka    schedule 14.11.2011
comment
Спасибо за объяснение. Еще один вопрос относительно ObjectState: почему новый элемент (только что добавленный) находится в состоянии Detached, а не в состоянии Added? - person Anatolii Gabuza; 14.11.2011
comment
SomeEntityCollection.AddNew(SomeNewEntity);, а затем DomainContext.SubmitChanges. Если нужно более точное описание могу предоставить. - person Anatolii Gabuza; 14.11.2011
comment
Любые идеи по этому вопросу? - person Anatolii Gabuza; 15.11.2011
comment
Вы пользуетесь услугами RIA? В таком случае мой ответ может быть неточным, потому что службы RIA добавляют свою собственную логику поверх EF. - person Ladislav Mrnka; 15.11.2011