.net - 如何确保处理 MongoDB 连接(DB Hanging)

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

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

Controller - 实例化服务对象(如下所述) - 使用服务从 mongo 检索数据库记录(例如 _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 接口(interface),我相信确保调用 Dispose 的最佳方法是使用“using” block ,但是

1) 应该在什么时候/哪里?它应该在服务层中,在调用 mongoRepository.Single 方法的方法内部吗?

2) 什么时候实例化MongoRepository?

如果需要更多代码来回答,请告诉我,我尽量保持简短。提前致谢。

最佳答案

1) 听起来您正在 Service 类中实例化和使用 Repository。所以不是

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

你会有

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

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

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

.NET best practices for MongoDB connections? 上对 MongoDB (C#) 连接进行了很好的讨论。

关于.net - 如何确保处理 MongoDB 连接(DB Hanging),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050532/

相关文章:

asp.net-mvc - ASP.NET MVC 3中的OutputCache行为

asp.net-mvc - 请求 .html 文件时调用 ASP.NET MVC Controller

asp.net - 如何通过@Html.DropDownListFor正确设置选定状态

c# - LINQ 按总和分组未按预期工作

c# - 如何在一个 VS 解决方案中运行 NUnit 测试之前启动控制台应用程序?

c# - 在电子表格中以 'mm/dd/YYYY' 格式显示为日期的数据在 C# 中显示为数字

asp.net-mvc-3 - Orchard CMS 小部件显示类型

.net - 在 Visual Studio 项目中引用使用 ILMerge 创建的程序集

asp.net-mvc - 使用 MVVM 将 kendo.data.DataSource 绑定(bind)到组合

asp.net - Css 在 asp.net mvc3 Razor Views 中不能正常工作