не работает, если у вас есть свойство объекта, являющегося ConcurrencyToken.
По крайней мере для меня. Потому что вы получите исключение OptimisticConcurrencyException.
Что я делаю (и я думаю, что это не оптимальное решение),
факты:
- Я использую новый контекст из-за n-уровня. Итак, предыдущий / оригинальный объект с его значениями неизвестен. Либо вы предоставляете контекст с оригинальным и старым (ба), либо как я, загружайте оригинал первым до обновления:
T originalItem = sessionManager.Set().Single(x => x.ID == changedEntity.ID);</p>
<pre><code> if(changedEntity.lastChangedDate != originalItem.lastChangedDate)
throw new OptimisticConcurrencyException(String.Format("Trying to update entity with lastChangedDate {0} using lastChangedDate {1}!", originalItem.lastChangedDate, changedEntity.lastChangedDate));
ObjectStateEntry state = sessionManager.ObjectStateManager.GetObjectStateEntry(originalItem);
state.ApplyCurrentValues(changedEntity);
state.ChangeState(System.Data.EntityState.Modified);
sessionManager.SaveChanges();
Если вы знаете что-то лучше, пожалуйста, дайте мне знать.
Atam