我采用单列模式返回数据操作层。所以在只new 一个 DataContext时。经常会出现已经打开一个DataReader。必须先关闭之类的错误!(我个人的理解是:就是因为才一个DataContext,所以有时候当同时进行2个查询的话会出现这个错误。不知道是否理解的有错!)所以我才在每个查询方法中都使用new DataContext,但是性能变的超差! 应该怎么样解决?ps:系统原来的数据层是用sql语句写的!我把他改成了linq。使用sql的话。在每个查询方法中都有打开一个新链接然后关闭!不会出现错误问题!但是使用linq的话如果不在每个方法中间new DataContext就经常出错!
2 回答

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

心有法竹
TA贡献1866条经验 获得超5个赞
给你的建议:
1、显式打开连接,减少反复打开连接的次数。(不过SQL Server具有连接池,不一定很有效)
dataContext.Connection.Open()
2、使用单例缓存一部份常用的数据。
没有找到匹配的内容?试试慕课网站内搜索吧
- 2 回答
- 0 关注
- 269 浏览
添加回答
举报
0/150
提交
取消