大多数情况下,当我使用数据库相关对象时,我的工作方式如下:
// Declare a private static variable of my database
private static BlueBerry_MTGEntities mDb = new BlueBerry_MTGEntities();
然后,在任何方法(例子)中:
public StoreInfo GetStoreByID(int _storeID)
{
using (mDb = new BlueBerry_MTGEntities())
{
mDb.Database.Connection.Open();
// Bla bla stuff to return the proper StoreInfo Object.
}
}
以这种方式工作以避免汇集崩溃并开发高效的MVC Asp.Net应用程序是一种好习惯吗?如果没有,那么什么是好的做法,你会怎么做?
答案 0 :(得分:5)
如果要在using
语句中使用它,则不必将其实例化(甚至声明)。
public StoreInfo GetStoreByID(int _storeID)
{
using (BlueBerry_MTGEntities mDb = new BlueBerry_MTGEntities())
{
mDb.Database.Connection.Open();
// Bla bla stuff to return the proper StoreInfo Object.
}
}
如果您要在using语句之外使用mDb
,那么您可以声明它但不必实例化(使用新关键字)。
答案 1 :(得分:4)
你不应该这样做 - 这是对static
功能的误用。
您的方法存在的问题是mDb
在StoreInfo
课程的生命周期内的任何时间都可以看到using
,但它仅在using
时有效块正在执行。一旦您的程序存在mDb
块,您的using
变量将变为无效,但它仍然是非空的,因此没有明显的方法来检查其有效性。因此,在mDb
块之外使用此变量的任何人都有访问已处置对象和触发异常的风险。
使using
成为常规局部变量,并确保其范围仅限于using (var mDb = new BlueBerry_MTGEntities())
{
mDb.Database.Connection.Open();
// Bla bla stuff to return the proper StoreInfo Object.
}
块,如下所示:
{{1}}