如何确保处理MongoDB连接(DB挂起)

时间:2011-05-18 20:18:10

标签: .net asp.net-mvc asp.net-mvc-3 mongodb

首先是一些上下文:我有一个MVC3 .net项目,为了简洁起见,设置如下:

控制器 - 实例化服务对象(如下所述) - 使用服务从mongo检索db记录(例如_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 个答案:

答案 0 :(得分:3)

1)听起来您正在实例化并使用Service类中的Repository。而不是

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

你会有

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

如果要在MongoRepository类中包装Mongo调用,请确保Dispose方法正确清除_server连接(close / disconnect / whatever)。看起来您正在构造函数中创建连接,在方法中使用它但从不关闭它。

2)根据我的经验,最好尽可能晚地打开数据库连接并尽早关闭它 - 而不是打开它并为不同的查询多次使用它。

.NET best practices for MongoDB connections?

上对MongoDB(C#)连接进行了很好的讨论