Отслеживание изменений и разрешение идентификаторов (платформа Entity Framework)
ObjectQuery добавляет новые объекты, возвращенные запросом в кэш объектов, поддерживаемый диспетчером ObjectStateManager. Метод Attach, применяемый к объектуObjectContext, и методы Load, применяемые к объектам EntityReference и EntityCollection, также добавляют объекты в кэш объектов. Имеется один диспетчер ObjectStateManager для каждого контекста объекта. Внутри контекста объекта объекты можно добавлять, изменять и удалять, вне зависимости от данных, находящихся в источнике данных. Когда несколько запросов или операций загрузки в области одного контекста объекта возвращают коллекции объектов, содержащие дубликаты, службы объектов сохраняют в кэше по одному экземпляру каждого объекта с конкретным ключом сущности. По умолчанию запросы возвращают только те объекты, которые еще не содержатся в кэше; это означает, что изменения объектов, уже находящихся в кэше, не перезаписываются. Это поведение управляется указанием значения параметра MergeOption для запросов и операций загрузки. По умолчанию устанавливается значение AppendOnly. В этом случае загружаются только объекты, еще не представленные в кэше объектов; иначе говоря, существующие объекты не перезаписываются. Еще один способ блокирования перезаписи изменений в кэше объектов при получении обновлений из базы данных состоит в указании параметра PreserveChanges. Этот способ часто используется для разрешения исключений оптимистического параллелизма при сохранении изменений в локальном контексте. Дополнительные сведения см. в разделе Сохранение изменений и управление параллелизмом (платформа Entity Framework). При указании параметра OverwriteChanges объекты в кэше заменяются новейшими версиями объектов, материализованных из базы данных, даже если в эти объекты уже были внесены изменения.