关于linq to sql 使用单列模式创建 DataContext 的问题(在线等待)

我采用单列模式返回数据操作层。所以在只new 一个 DataContext时。经常会出现
已经打开一个DataReader。必须先关闭之类的错误!(我个人的理解是:就是因为才一个DataContext,所以有时候当同时进行2个查询的话会出现这个错误。不知道是否理解的有错!)所以我才在每个查询方法中都使用new DataContext,但是性能变的超差! 
应该怎么样解决?

ps:系统原来的数据层是用sql语句写的!我把他改成了linq。使用sql的话。在每个查询方法中都有打开一个新链接然后关闭!不会出现错误问题!但是使用linq的话如果不在每个方法中间new DataContext就经常出错!


慕后森
浏览 270回答 2
2回答

MYYA

我猜你做的是个WEB项目。你用单例来返回DataContext肯定会出问题的。可以用伪单例,就是在每个Request的生命周期里存在一个唯一的DataContext,把这个DataContext放在当前HttpContext.Items[]里面。可以用工厂方法来实现。虽然可以用上面的方法,但是每次new DataContext()应该也是可以的。DataContext是轻量级的对象,微软设计的就是可以使用之前new, 用完就Dispose的,不应该造成性能问题。建议你再仔细看一下报的异常,找出问题的根源。

心有法竹

给你的建议:1、显式打开连接,减少反复打开连接的次数。(不过SQL Server具有连接池,不一定很有效)dataContext.Connection.Open()2、使用单例缓存一部份常用的数据。
打开App,查看更多内容
随时随地看视频慕课网APP