首页 新闻 搜索 专区 学院

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

0
悬赏园豆:100 [已关闭问题]


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

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

linmadan的主页 linmadan | 初学一级 | 园豆:50
提问于:2009-04-16 10:40
< >
分享
其他回答(2)
0

我猜你做的是个WEB项目。你用单例来返回DataContext肯定会出问题的。可以用伪单例,就是在每个Request的生命周期里存在一个唯一的DataContext,把这个DataContext放在当前HttpContext.Items[]里面。可以用工厂方法来实现。

虽然可以用上面的方法,但是每次new DataContext()应该也是可以的。DataContext是轻量级的对象,微软设计的就是可以使用之前new, 用完就Dispose的,不应该造成性能问题。建议你再仔细看一下报的异常,找出问题的根源。

Azuresong | 园豆:3565 (老鸟四级) | 2009-04-16 11:02
0

给你的建议:

1、显式打开连接,减少反复打开连接的次数。(不过SQL Server具有连接池,不一定很有效)

dataContext.Connection.Open()

2、使用单例缓存一部份常用的数据。

麦舒 | 园豆:452 (菜鸟二级) | 2009-04-16 11:22
0

Linq的话不是可以直接对象话查询么?

菜鸟老了 | 园豆:145 (初学一级) | 2012-05-04 00:07

DataContext有个Current的对象,直接关联数据库对应的表,然后可以进行对象话查询,可以不用到DataReader吧。

Linq to sql 的效率蛮低的,不建议使用

支持(0) 反对(0) 菜鸟老了 | 园豆:145 (初学一级) | 2012-05-04 00:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册