Использование FluentMongo для удаления и обновления документов - PullRequest
3 голосов
/ 24 февраля 2012

Мне было интересно, есть ли у кого-нибудь чистый способ обработки удаления и обновления документов с помощью FluentMongo?

Я создаю слой хранилища, используя FluentMongo;однако невозможность удаления или обновления документов оказывается проблематичной.Возможно, я упустил способ справиться с этим, сохраняя правильный шаблон хранилища?

public interface IRepository : IDisposable
{
    IQueryable<T> All<T>() where T : class, new();

    void Delete<T>(Expression<Func<T, bool>> expression)
        where T : class, new();

    void Update<TEntity>(TEntity entity) where TEntity : class, new();
}

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2012

Самый простой способ - обернуть стандартную коллекцию MongoCollection за вашими методами репозитория.Поскольку ваш репозиторий напечатан, вы можете просто создать типизированную коллекцию и удалить документы из этой коллекции.Вот пример реализации.

 MongoCollection<T> collection = mongoserver.GetCollection<T>();

 public void Delete(string id)
 {   
      this.collection.Remove(Query.EQ("_id", id));
 }

 public void Delete(T entity)
 {
     this.Delete(entity.Id);
 }

добавлено balexandre 27 июля 2013 года

с использованием FluentMongo , есть свойство, которое извлекает MongoCollection<T>, которое полезно для сложных запросов, например, если мы хотим удалить все наши документы в нашей коллекции, мы напишем что-то вроде этого:

public void DeleteAll() {
    var collection = myRepository.Collection;
    collection.RemoveAll();
}

, есливы хотите вернуть подтверждение, что все документы действительно были удалены, используйте свойство Ok

public bool DeleteAll() {
    var collection = myRepository.Collection;
    return collection.RemoveAll().Ok;
}
...