0

我正在构建一个 MVC3 应用程序,并且我正在为我的 DAL 使用 Linq to sql。我的 DAL 称为 MyDataReader 并处理创建/初始化数据上下文,此外它还定义了从数据库中检索数据的所有方法。所有的方法都是实例方法,所以为了调用这些方法,我需要实例化一个 MyDataReader 对象。

我的问题是:在我的 DAL 中调用方法的最佳方法是什么。最初,每当我需要调用 DAL 方法时,我都会从控制器中实例化一个 MyDataReader 对象。然后我意识到每次实例化 MyDataReader 对象时,都会创建 datacontext 对象并建立连接。

在我的第二种方法中,我在 Global.asax 文件中创建了一个静态参数,如下所示:

public class MvcApplication : System.Web.HttpApplication
{

        public static MyDataReader reader;
        protected void Application_Start()
         {
            reader = new MyDataReader();
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
         }
}

这将数据库初始化操作限制在最低限度。我可以通过以下方式从我的所有控制器中调用 DAL 方法:

MvcApplication.reader.CallTheMethod()

这是一个好方法吗?调用 DAL 方法的最佳方法是什么?

4

1 回答 1

2

不,这绝对是最糟糕的做法。最大的原因是所有并发用户之间共享静态对象。这意味着多个用户添加、删除、查询相同的上下文。这是灾难的根源,可能会导致数据损坏。

另一个问题是数据上下文被设计为短暂存在的,因此它们不管理其内部缓存和列表,它们只是假设您在完成操作后将处理它们。

您无需担心连接管理。在内部,这是在连接池中管理的,.net 会自动重用连接,并在它们空闲一段时间后将其丢弃。

不要过早地优化。你通常是错的。

于 2012-10-05T17:39:05.673 回答