我正在使用EF 4.0,并且我想使用隔离级别serializable
,因为在事务中,我想在读取时阻止寄存器。
好吧,在SQL Server中,我尝试使用以下命令更改隔离级别:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
在C#中,我使用以下代码尝试阻止寄存器:
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable }))
{
Entities myContext = new Entities();
string colors = "select * from Colors where IDColor = 2";
Colors myColor = myContext.Colors.SqlQuery(colors).FirstOrDefault<Colors>();
myColor.Color = "Red";
myContext.SaveChanges();
scope.Complete();
}
如果我逐行执行我的代码,如果我获得了
SaveChanges
但仍然没有执行,例如,如果使用SQL Server Management Studio对表颜色进行查询,则可以获取记录。然后,如果执行保存更改并获得
scope.Clompete()
,如果我尝试使用Management Studio进行查询,则由于寄存器被阻塞而无法获得任何结果,因此当我完成C#代码时,寄存器被释放并得到结果在Management Studio中。所以我的问题是,如何在C#中使用可序列化的隔离级别?难道我做错了什么?
附注:我注意到,如果我使用以下命令:
DBCC useroptions;
我看到隔离级别是
serializable
,但是如果我关闭Management Studio并再次连接,则看到隔离级别是默认的readCommitted
。所以我的问题是如何为数据库设置默认的隔离级别。
最佳答案
如何在DB Check Isolation Levels in the Database Engine和SET TRANSACTION ISOLATION LEVEL (Transact-SQL)上更改IsolationLevel
更新
要更改
isolation level
,请在SSMS上运行以下提到的命令:USE YourDatabaseName;
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
检查是否适用?
USE YourDatabaseName;
GO
DBCC useroptions
MSDN说:
希望对您有帮助。
关于c# - 如何更改隔离级别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14536805/