Asp.net mvc 3 mvc3和linq到sql体系结构

Asp.net mvc 3 mvc3和linq到sql体系结构,asp.net-mvc-3,data-access-layer,Asp.net Mvc 3,Data Access Layer,我正在构建一个MVC3应用程序,我正在为我的DAL使用Linq到sql。我的DAL称为MyDataReader,负责创建/初始化datacontext,另外它还定义了从数据库检索数据的所有方法。所有的方法都是实例方法,所以为了调用这些方法,我需要实例化一个MyDataReader对象 我的问题是:在DAL中调用方法的最佳方式是什么。最初,每当需要调用DAL方法时,我都从控制器实例化MyDataReader对象。然后我意识到每次实例化MyDataReader对象时,都会创建datacontext对

我正在构建一个MVC3应用程序,我正在为我的DAL使用Linq到sql。我的DAL称为MyDataReader,负责创建/初始化datacontext,另外它还定义了从数据库检索数据的所有方法。所有的方法都是实例方法,所以为了调用这些方法,我需要实例化一个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方法的最佳方式是什么?

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

另一个问题是,数据上下文的设计寿命很短,因此它们不管理其内部缓存和列表,它们只是假设您在完成操作时会处理它们

您不需要担心连接管理。在内部,这是在连接池中管理的,当连接闲置一段时间时,.net将自动重用连接并将其丢弃


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

我理解你的第二点,但是关于第一部分,方法不是静态的,只有MyDataReader对象是静态的。这还会导致数据损坏吗?!我说错话了。我指的是静态对象(我已经更新了答案)。您的MyDataReader是静态的。