Можно ли автоматически заполнять поля LastUpdated в MongoDB (с помощью драйвера C #) - PullRequest
1 голос
/ 02 февраля 2012

Я хочу автоматически обновлять поле LastUpdatedOn в монго-документе каждый раз, когда в этом документе выполняется операция сохранения или обновления.

Вместо того, чтобы возлагать эту нагрузку на каждый бит кода, который выполняет сохранение / обновлениеЕсть ли способ автоматически сделать это (я использую драйвер C #).

Например, в nHibernate вы можете использовать перехватчики .Существует ли подобный метод на уровне базы данных или драйвера?

1 Ответ

4 голосов
/ 02 февраля 2012

перехватчики.Существует ли подобный метод на уровне базы данных или драйвера?

Нет такого механизма в драйвере mongodb c # и в mongodb.Для достижения ваших потребностей вы можете просто обернуть все Save, Insert, атомарные Update методы и установить поле LastUpdatedOn там.

Например, у вас может быть базовый класс для вашего хранилища, службы, где бы вы ни заключали свои методы сохранения:

public abstract class BaseMongoService<T> where T : BaseDocument
{
   protected abstract MongoCollection Items { get; }

   public virtual SafeModeResult Save(T document)
   {
      document.LastUpdatedOn = DateTime.Now;

      return Items.Save(document);
   }
   public virtual void Update(IMongoQuery query, IMongoUpdate update)
   {
      update = update.Set("LastUpdatedOn", DateTime.Now);
      Items.Update(query, update);
   }
}

, тогда вам нужно будет наследовать все ваши документы от BaseDocument (или заставьте их реализовать некоторый интерфейс), чтобы добавить ограничение, что все документы должны содержать поле LastUpdatedOn.

public class BaseDocument
{
  public DateTime LastUpdatedOn {get;set;}
}

Затем просто наследуйте все классы доступа к данным выше одного и используйте методы Save, Update из базового класса.

Примечание : весь этот код не был проверен, просто, как я вижу, это можно сделать.

...