У меня есть следующий Update универсальный метод для моих сущностей:EF 6 OriginalValues потерявшие при использовании метода Attach
public void Update <T> (T entity) where T: class {
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == System.Data.Entity.EntityState.Detached) {
DbContext.Set <T>().Attach(entity);
}
dbEntityEntry.State = System.Data.Entity.EntityState.Modified;
}
После SaveChanges()
данные успешно обновляется в БД.
Теперь я урожденная реализовать и журнал аудита, прежде чем SaveChanges()
, но я заметил, что CurrentValues
равны OriginalValues
:
// For updates, we only want to capture the columns that actually changed
if (!object.Equals(dbEntry.OriginalValues.GetValue<object>(propertyName), dbEntry.CurrentValues.GetValue<object>(propertyName))){
//here I add a new Audit Log entity
}
Любой ключ о том, как решить эту проблему? Или есть лучший способ сделать это в Entity Framework 6?
Вы совершенно правы! Мне нужно получить из БД исходную сущность, а затем выполнить сравнение. Не знаю, может ли это замедлить работу приложения. – VAAA
Конечно, это медленнее: вы дважды попадаете в базу данных, и это относительно дорого. Однако не беспокойтесь о производительности приложения, если у вас нет этой проблемы. Другими словами: не тратьте время на повышение производительности, если у вас нет проблемы с производительностью. В это время вы планируете внедрять функции. Пожалуйста, если вы считаете, что это правильный ответ, примите его. – JotaBe