2015-11-20 68 views
1

我读过this后,我很困惑什么是创建和使用数据环境的最佳方式?在ASP.NET中创建和重用datacontext的最佳方式.NET MVC应用程序

我一直认为你应该使用单像下面(+锁定)

private static ModelDataContext dataContext=null; 
protected static ModelDataContext DataContext 
{ 
    get 
    { 
     if(dataContext==null) 
      dataContext = new ModelDataContext(); 
     return dataContext; 
    } 
} 

但是在文章中他简短说:

LINQ DataContexts缓存一些数据和更改都 - 你如果每个实例没有很快处理,可能会很快耗尽内存。 TableAdapter持有开放的SQLConnections以供重用 - 因此,如果您使用了足够多的TableAdapter类,则可以拥有足够的不同静态变量来捆绑所有数据库连接。

,并建议使用下面

protected static ModelDataContext DataContext 
{ 
    get 
    { 
     if(System.Web.HttpContext.Current.Items["ModelDataContext"]==null) 
      System.Web.HttpContext.Current.Items["ModelDataContext"] = new ModelDataContext(); 
     return (ModelDataContext)System.Web.HttpContext.Current.Items["ModelDataContext"]; 
    } 
} 

模型你有什么想法?

+0

我敢打赌,将你的上下文放在'HttpContext'中并不好。要么使用静态属性不是很好,你已经提到了它。我通常在每个请求中创建'DataContext'并在响应发送给客户端时处置它 –

+0

您是否发现*创建*上下文是特别昂贵的操作?我通常没有发现这种情况,但也许我的应用程序的音量不够高。除非有明显的性能问题,否则我会说你应该真正创建和处理你的上下文作为对应用程序提出的任何请求的工作单元。在多用户应用程序中使用* static *或以任何方式*共享*数据库连接对我来说似乎是一个非常糟糕的主意。 – David

+1

依赖注入是要走的路。您的上下文应该位于“请求”范围内(从一个IoC容器到下一个,确切的术语可能略有不同)。这意味着生命周期将被绑定到请求:将为每个请求创建一个新实例,并在请求完成时处理。 –

回答

0

我强烈建议使用依赖注入容器(例如ninject)为每个Web请求创建新的DataContext

相关问题