Kim*_*mpo 11 database-connection scoping mongodb norm mongodb-.net-driver
我对MongoDB和NoSQL很新,我刚刚开始使用MongoDB/Norm/ASP.NET MVC 3构建一个站点.
我想知道我应该如何确定与Mongo数据库的连接.
现在我有一个Basecontroller,它实现了MongoSession和onActionExecuted我处理它所以我所有的派生控制器都可以访问我的MongoSession.MongoSession类在其构造函数中打开一个连接,并将它放在Dispose()上,就像它今天的工作方式一样.
private IMongo _mongo;
public MongoSession()
{
_mongo = Mongo.Create("connString");
}
public void Dispose()
{
_mongo.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果我在控制器中做其他事情,我有点担心它可能会持续打开太长时间.
这种方法是否应该不会冒太多连接的风险,或者我应该做更像下面的示例方法?
public void Add<T>(T item) where T : class, new()
{
using (var mongo = Mongo.Create("connString"))
{
mongo.GetCollection<T>().Insert(item);
}
}
Run Code Online (Sandbox Code Playgroud)
另一个跟进问题是:
通过Norm"昂贵"操作打开和关闭MongoDB连接?
我会保持连接打开,因为重新创建连接是昂贵的.Mongo很好,有很多连接,打开很长时间.理想情况下,您应该与应用程序的所有部分共享连接作为持久连接.C#驱动程序应该足够聪明,可以自行完成,因此它不会创建太多的连接,因为它内部使用"连接池",甚至可以重用连接.文档说:"服务器的连接是在幕后自动处理的(连接池用于提高效率)."
欢呼,德里克