我的项目使用dbml来访问带有linq到sql的数据库。它在需要的几个操作中使用事务。
随着数据库的增长,我面临以下错误:
超时已过期。操作完成之前经过的超时时间或服务器没有响应。
锁定时,事务(进程ID 82)已死锁与另一个进程通信缓冲资源并被选为死锁牺牲品。重新运行交易
项目中有数以千计的linq查询。所以我不能将TransactionSope
代码放到所有选择的查询中,因为它很耗时。
有没有办法让我可以在dbml中设置默认的Transaction IsolationLevel,以便它可以读取未提交的内容并且不会陷入死锁。
如果您对此问题有任何疑问,请与我们联系。
答案 0 :(得分:0)
在查询执行之前调用之后应该有效..
dataContext.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
初始化dataContext后,您可以执行一次 OR
实现一个Extension方法,该方法调用datacontext ExecuteCommand一次,如上所述设置事务隔离级别,然后执行一次实际命令执行。