ObjectStateManager
— это компонент, предоставляющий информацию об отслеживаемых объектах. Каждый объект, который может быть сохранен EF, должен быть отслежен = прикреплен. Отсоединенные объекты неизвестны EF (они не отслеживаются), поэтому их изменения не сохраняются при вызове SaveChanges
(в EF нет SubmitChanges
). Отслеживание состоит в поддержании информации об начальном состоянии объекта или отношения и изменениях, внесенных в них. Он также содержит глобальное состояние объекта.
Процесс, когда вы вызываете SaveChanges, зависит от того, как вы настроили EF для отслеживания изменений, от того, как вы получили сущность и от внесенных вами изменений.
Отслеживание изменений — это функция, которая позволяет EF отслеживать изменения, примененные к объектам, присоединенным к контексту (каждый объект, загруженный запросом, по умолчанию присоединен). EF содержит версию отслеживания изменений:
- Снапшот — только для POCO. EF не отслеживает изменения в сущностях, но когда вы вызываете
SaveChanges
, он сравнивает сохраненное состояние сущности (полученное при загрузке сущности) и текущие данные в сущности и соответствующим образом устанавливает ее состояние.
- Динамический — собственный для сущностей на основе EntityObject и достигается за счет динамических прокси-серверов для POCO. Каждое изменение прикрепленного объекта вызывает изменение в отслеживаемой записи и соответствующим образом устанавливает состояние объекта. Когда вы вызываете
SaveChanges
, состояния уже настроены.
Порядок операций модификации данных определяется внутренней реализацией EF. Базовый порядок определяется вашим сопоставлением, в котором описывается зависимость между сущностями.
person
Ladislav Mrnka
schedule
14.11.2011