默认情况下如何将TransactionScope设置为Read Uncommitted

时间:2011-12-07 12:36:16

标签: sql linq linq-to-sql

我的项目使用dbml来访问带有linq到sql的数据库。它在需要的几个操作中使用事务。

随着数据库的增长,我面临以下错误:

  1. 超时已过期。操作完成之前经过的超时时间或服务器没有响应。

  2. 锁定时,事务(进程ID 82)已死锁与另一个进程通信缓冲资源并被选为死锁牺牲品。重新运行交易

  3. 项目中有数以千计的linq查询。所以我不能将TransactionSope代码放到所有选择的查询中,因为它很耗时。

    有没有办法让我可以在dbml中设置默认的Transaction IsolationLevel,以便它可以读取未提交的内容并且不会陷入死锁。

    如果您对此问题有任何疑问,请与我们联系。

1 个答案:

答案 0 :(得分:0)

在查询执行之前调用之后应该有效..

dataContext.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")

初始化dataContext后,您可以执行一次 OR

实现一个Extension方法,该方法调用datacontext ExecuteCommand一次,如上所述设置事务隔离级别,然后执行一次实际命令执行。