创建db对象的只读实例而不是使用块在内部声明它的优点是什么?

时间:2015-12-17 12:41:02

标签: c# entity-framework-6

我在我的控制器中创建db对象,这些对象在大约一百个地方使用,我们有两种创建数据库上下文对象的方法:

首先:

using (MyEntities db = new MyEntities())
{
    var result = db.GetUsere();
    ...
}

using (MyEntities db = new MyEntities())
{
    var result1 = db.GetUserRoles();
    ...
}

第二

private readonly MyEntities db = new MyEntities();
var result = db.GetUsere();
var result1 = db.GetUserRoles();

在第一种情况下,我们每次要使用它时都要创建db对象,而在第二种情况下,只有一个对象可以完成任务。

那么使用一个优于另一个有什么特别的优势吗?

当我在控制器初始化时创建控制器时,是否有办法处理单例db对象?

2 个答案:

答案 0 :(得分:0)

在第二种情况下,您必须手动处理上下文。使用"使用"阻止,保证它将被处置:

  

上下文的生命周期在创建实例时开始,在实例处理或垃圾收集时结束。如果您希望将上下文控制的所有资源放置在块的末尾,请使用。使用时,编译器会自动创建一个try / finally块,并在finally块中调用dispose。

Working with DbContext

此外,在使用块中使用您的上下文,被视为"标准"。必须手动管理您的对象,并知道何时处理它们是一项您绝对不需要的过度工作。让.Net为你做这件事。

答案 1 :(得分:0)

有第三种选择,这是“两全其美”。保留上下文的单个实例会自动处理,但会对其进行多次调用。

using (MyEntities db = new MyEntities())
{
    var result = db.GetUsere();
    var result1 = db.GetUserRoles();
    ...
}