Entity Framework: смотреть изменения, сохраненные на моих объектах - PullRequest
1 голос
/ 15 сентября 2010

Для моего проекта я должен регистрировать все изменения, сделанные в моих объектах, через структуру сущностей. Это состоит просто для регистрации того, какие поля были отредактированы для какой таблицы и в какое время.

Грубо, внесите изменения в таблицу с такой структурой: IDEvent, EventDate, TableName, RowID, FieldName, OldValue, NewValue

Если есть несколько изменений, будет вставлено несколько строк.

Это уже работает для 90% моих дел, я слушаю событие SavingChanges ObjectContext

Моя единственная проблема: в случае добавления мои первичные ключи, сгенерированные SQL (IDENTITY), в данный момент не присутствуют (логика) в событии SavingChanges, поскольку они еще не сохранены в БД, и проблема в том, что мне это действительно нужно (чтобы заполнить мой RowID в моей таблице)

Итак, у вас есть идея, как это сделать? Я не нашел никакого события "ChangesSaved". Идея обходного пути?

1 Ответ

2 голосов
/ 15 сентября 2010

Вы не сможете сделать это в событии SavingChanges.Я думаю, что вы можете создать свою собственную обертку для ObjectContext и реализовать свою собственную логику в методе обертки для SaveChanges.Логика должна быть такой, как

public class MyContextWrapper : IDisposable
{
  private ObjectContext _context;

  public void SaveChanges()
  {
    // Detect changes but do not accept them
    _context.SaveChanges(SaveOptions.DetectChangesBeforeSave); // SaveChanges(false) in .NET 3.5 SP1

    // TODO audit trail

    // Audit is completed so accept changes
    _context.AcceptAllChanges();
  }

}

Вы также должны добавить TransactionScope в свои новые SaveChanges.

...