我在我的控制器中创建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对象?
答案 0 :(得分:0)
在第二种情况下,您必须手动处理上下文。使用"使用"阻止,保证它将被处置:
上下文的生命周期在创建实例时开始,在实例处理或垃圾收集时结束。如果您希望将上下文控制的所有资源放置在块的末尾,请使用。使用时,编译器会自动创建一个try / finally块,并在finally块中调用dispose。
此外,在使用块中使用您的上下文,被视为"标准"。必须手动管理您的对象,并知道何时处理它们是一项您绝对不需要的过度工作。让.Net为你做这件事。
答案 1 :(得分:0)
有第三种选择,这是“两全其美”。保留上下文的单个实例会自动处理,但会对其进行多次调用。
using (MyEntities db = new MyEntities())
{
var result = db.GetUsere();
var result1 = db.GetUserRoles();
...
}