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 |
Похожие запросы:
|
|