为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2018-11-06 06:03:38
我采用单列模式返回数据操作层。所以在只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的,不应该造成性能问题。建议你再仔细看一下报的异常,找出问题的根源。


查看完整回答
反对 回复 2018-11-07
?
心有法竹

TA贡献1866条经验 获得超5个赞

给你的建议:

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

dataContext.Connection.Open()

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


查看完整回答
反对 回复 2018-11-07

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号