TransactionScope是否在LinQ查询中对数据库进行跨进程锁定?

时间:2012-07-11 11:04:31

标签: c# database linq transactions transactionscope

我在一台机器上运行了几个应用程序,同时在该机器上运行了一个MSSQL服务器。

应用程序是各种类型的,如WPF,WCF服务,MVC应用程序等。 所有这些都访问位于sql server上的唯一数据库。 访问模式是简单的LinQ-to-SQL类调用。

在每个数据库中,我都会进行一些查询,一些检查和一些db-write。

我的问题是: 通过使用简单的TransactionScope实例,我可以确定这些事务范围内的调用没有同时运行(线程和进程安全)吗?

1 个答案:

答案 0 :(得分:0)

使用事务范围显然会使特定连接成为事务性的。事务范围本身的使用并不会阻止同时执行相同操作的计算机上的两个不同进程。它确实确保执行的所有操作都已提交或回滚。每个进程看到的数据视图取决于隔离级别,默认情况下是可序列化的,这很容易导致死锁。读取更实用的隔离级别,最好是快照隔离,因为这可以进一步减少死锁和等待时间。

如果您想确保只有一个应用程序实例正在执行某些操作,您可以使用互斥锁或使用所有不同进程将尝试获取的数据库锁,并在必要时等待。