我有一个MVC项目。我们选择了EF来进行数据库交互。我们为BLL层创建了一些管理器。我发现很多示例中都使用了"using
"语句,例如:
public Item GetItem(long itemId)
{
using (var db = new MyEntities())
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
}
在这里,我们创建了一个 DBcontext 的新实例
MyEntities()
。
我们使用 "using
" 来"确保正确使用 IDisposable 对象。"
我的管理器中只有一个方法。但我有十个以上的方法。
每次调用管理器中的任何方法时,我都会使用 "using
" 语句并在内存中创建另一个 DBcontext。垃圾回收器(GC)何时处置它们?有人知道吗?但是,还有一种管理器方法的替代用法。 我们创建一个全局变量:
private readonly MyEntities db = new MyEntities();
在每个方法中都使用DBcontext,而不需要“using”语句。方法看起来像这样:
public Item GetItem(long itemId)
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
问题:
- 使用DBcontext变量的正确方式是什么?
- 如果我们不使用"
usage
"语句(因为它会影响性能)- GC会自动处理吗?
我是EF使用方面的"菜鸟",还没有找到这个问题的明确答案。