Автоматически сгенерированная метка времени в Entity Manager - PullRequest
4 голосов
/ 22 мая 2011

У меня есть WPF DataGrid, привязанный к некоторым объектам (Entity Framework 4+).

Затем пользователь редактирует сетку данных и нажимает кнопку СОХРАНИТЬ. Затем данные сохраняются обратно в MS SQL Server 2008 с помощью SaveChanges(). Хорошо ... теперь я хотел бы иметь метку времени AUTOMATIC, которая хранит время последнего изменения и автоматически обновляется.

Ребята, это возможно? Как?

Спасибо, Джеймс

1 Ответ

6 голосов
/ 22 мая 2011

Самое простое решение для достижения этой цели - на уровне базы данных:

  • Создайте новый столбец в таблице для хранения значения DateTime.
  • Создание триггера базы данных для установки столбца для каждой вставки или обновления таблицы.
  • Сопоставление нового столбца как свойства в вашей сущности
  • Установка StoreGeneratedPattern для новогосвойство Computed, поэтому значение, сгенерированное в базе данных, корректно обновляется для присоединенной сущности после каждой вставки или обновления.

Если вам не нравится триггер, вы должны сделать это вручную в переопределенном SaveChangesгде вы найдете все объекты, которые будут вставлены или обновлены, и установите столбец:

public override int SaveChanges(SaveOptions options)
{
    var entities = ObjectStateManger.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
                                    .Select(e => e.Entity)
                                    .OfType<YourEntityType>();

    DateTime now = DateTime.Now;
    foreach(var entity in entities)
    {
        entity.Updated = now;
    }

    return base.SaveChanges(options);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...