【发布时间】:2012-02-28 15:37:24
【问题描述】:
总的来说,我对 MongoDB 和 NoSQL 非常陌生,我刚刚开始使用 MongoDB / Norm / ASP.NET MVC 3 构建一个站点。
我想知道我应该如何确定与 Mongo 数据库的连接范围。
现在我有一个实例化 MongoSession 和 onActionExecuted 的 Basecontroller,我将其处理掉,因此我所有的派生控制器都可以访问我的 MongoSession。 MongoSession 类在其构造函数中打开一个连接并将其释放到 Dispose() 上,这就是它目前的工作方式。
private IMongo _mongo;
public MongoSession()
{
_mongo = Mongo.Create("connString");
}
public void Dispose()
{
_mongo.Dispose();
}
我有点担心如果我还在控制器中做其他事情,它可能会保持连接打开太久。
这种方法是否足以避免打开太多连接的风险,还是我应该做一些更像下面的示例方法的事情?
public void Add<T>(T item) where T : class, new()
{
using (var mongo = Mongo.Create("connString"))
{
mongo.GetCollection<T>().Insert(item);
}
}
另一个后续问题是:
是否通过 Norm “昂贵”的操作打开和关闭 MongoDB 连接?
【问题讨论】:
-
Norm 几乎不再被维护,如果你想要 LINQ 支持,请使用官方的 mongo 驱动程序和 FluentMongo。
-
除了在代码上打开和关闭连接的问题之外,我遇到了互联网提供商关闭连接的问题,然后我的代码出现了 EndOfStreamException。我通过使用 settings.MaxConnectionIdleTime = TimeSpan.FromSeconds(30); 解决了它stackoverflow.com/a/44606284/194717
标签: mongodb database-connection mongodb-.net-driver scoping norm