声明数据库变量的好习惯

时间:2013-12-17 17:30:35

标签: c# asp.net asp.net-mvc entity-framework

大多数情况下,当我使用数据库相关对象时,我的工作方式如下:

// 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应用程序是一种好习惯吗?如果没有,那么什么是好的做法,你会怎么做?

2 个答案:

答案 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功能的误用。

您的方法存在的问题是mDbStoreInfo课程的生命周期内的任何时间都可以看到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}}