16 июля 2014
Кравченко Виктор

Как получить старые значения свойств сущности перед сохранением

VB.NET ADO.NET Entity Framework
01

Бывает возникает необходимость обратиться к предыдущим свойствам сущности перед её сохранением. Вариант с банальным присвоением значения переменной

02 VB.NET
1
Dim entity As Entity = db.Entities.Where(Function(e) e.ID = 1).SingleOrDefault
03

приводит к ошибке В диспетчере ObjectStateManager уже имеется объект с таким ключом. Диспетчер ObjectStateManager не может отслеживать несколько объектов с одинаковым ключом.

04

Решить проблему можно «костыльным» путем отсоединения (detach) объекта от контекста db.Entities.Detach(entity), но в Entity Framework предусмотрен механизм получения старых свойств объекта db.ObjectStateManager.GetObjectStateEntry(entity):

05 VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim entity As ObjectStateEntry = db.ObjectStateManager.GetObjectStateEntry(entityToSave) Dim oldSomeValue = entity.OriginalValues("SomeValue") ' Получаем старое значение Dim newSomeValue = entity.CurrentValues("SomeValue") ' Получаем новое значение Dim modifiedProperties = entity.GetModifiedProperties ' Так получаем список измененных свойств For Each mp As String In modifiedProperties Console.WriteLine("Property:{0}, OldValue:{1}, NewValue:{2}", _ mp, _ entity.OriginalValues(mp), _ entity.CurrentValues(mp)) Next
07

Похожие запросы:

  • get the entity before change
  • Getting all changes made to an object in the Entity Framework
  • ASP.NET — как при вводе нового значения сохранять старое
  • В диспетчере ObjectStateManager уже имеется объект с таким ключом. Диспетчер ObjectStateManager не может отслеживать несколько объектов с одинаковым ключом
  • How to get original values of an entity in Entity Framework?
  • Self-Tracking Entities: Original Values and Update Customization
  • Resetting the original values using ApplyOriginalValues method
comments powered by HyperComments