2015-07-07 4 views
2

У меня есть очень простой метод Web API, который выглядит следующим образом:EntityFramework переоденусь/модифицированные свойства после SaveChanges()

public void Put(Vehicle vehicle) 
    { 
     db.Entry(vehicle).State = EntityState.Modified; 
     db.SaveChanges(); 
    } 

Все это делает обновление прямых свойств объекта транспортного средства. Это прекрасно работает. Но теперь я хотел бы узнать, какие свойства действительно изменились? Есть ли способ сделать это?

Возможно, я, возможно, сначала доставил транспортное средство из базы данных, а затем сравнил его с модифицированным автомобилем. Но, возможно, есть более простой способ.

Благодаря

+0

Вы даже можете заглянуть в трекер изменений, чтобы узнать, какие объекты установлены, и делать дальше на основе таких, как аудит ... –

+0

'context.ChangeTracker.Entries () .Where (entry => entry.State == EntityState.Added) ' –

+0

, насколько я вижу, для этого требуется сначала получить транспортное средство от db: http://www.entityframeworktutorial.net/change-tracking-in -entity-framework.aspx – Timothy

ответ

1

Посмотрите на этот

DbContext.Entry(vehicle).OriginalValues 

и сравнить эти значения с помощью входного транспортного средства

+0

это не работает, Original и CurrentValues те же – Timothy

+0

Они такие же после сериализации в базе данных. – bubi

0
db.Entry(vehicle).GetDatabaseValues() 

Я нашел это, и это, кажется, работает. Теперь мне просто нужно их сравнить

+0

_ «Я, вероятно, мог сначала получить транспортное средство из базы данных, а затем сравнить его с модифицированным транспортным средством. Но, возможно, есть более простой способ». _ :) – bubi

+0

да, но на секунду подумал, что, возможно, это невозможно сделать, не получив транспортное средство от дБ. EF просто напишет запрос на обновление со всеми полями, которые не являются PK. Поэтому из этого запроса обновления нет возможности узнать, что изменилось ... – Timothy

Смежные вопросы