Как обеспечить избавление от подключения MongoDB (DB Hanging) - PullRequest
4 голосов
/ 19 мая 2011

Сначала немного контекста: у меня есть проект MVC3 .net, который для краткости настроен примерно так:

Контроллер - Создание объекта обслуживания (описано ниже) - Использует сервис для извлечения записи БД из Монго (например, _service.GetPerson (id)) - пропускает домен для просмотра

Услуги - Создание хранилища MongoRepository (описано ниже) - Вызывает метод для извлечения записи из базы данных (например, _mongoRepository.Single (c => c.Id == id))

MongoRepository: IDisposable - Конструктор (_server = Mongo.Create (ConfigurationManager.ConnectionStrings ["mongodb"]. ConnectionString)) - Одиночный метод (ниже) - Способ утилизации

public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new()
        {
            return _server.GetCollection<T>().AsQueryable()
                        .Where(expression).SingleOrDefault();
        }

Теперь это мой вопрос, поскольку вы можете видеть, что MongoRepository реализует интерфейс IDisposable, и я считаю, лучший способ гарантировать, что вызов Dispose - это использование блока 'using', но

1) когда / где это должно быть? Должно ли оно быть на уровне Service, внутри метода, вызывающего метод mongoRepository.Single?

2) когда следует создать экземпляр MongoRepository?

Если для ответа требуется больше кода, пожалуйста, дайте мне знать, я старался, чтобы он был коротким. Заранее спасибо.

1 Ответ

3 голосов
/ 19 мая 2011

1) Звучит так, будто вы создаете экземпляр и используете репозиторий в классе Service.Таким образом, вместо

var _mongoRepository = new MongoRepository(..);
_mongoRepository.Single(...);

у вас будет

using (var _mongoRepository = new MongoRepository(..))
{
    _mongoRepository.Single(..);
}

Если вы переносите вызовы Mongo в классе MongoRepository, то убедитесь, что метод Dispose правильно очищает _serverсоединение (закрыть / отключить / что угодно).Похоже, вы создаете соединение в конструкторе, используете его в методе, но никогда не закрываете его.

2) Исходя из моего опыта, предпочтительно открывать соединение с БД как можно позже и закрывать его как можно раньше, а не открывать его и использовать его несколько раз для разных запросов.

Существует хорошее обсуждение подключений MongoDB (C #) на .NET лучшие практики для подключений MongoDB?

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