【问题标题】:how to change isolation level?如何更改隔离级别?
【发布时间】:2013-01-26 12:10:47
【问题描述】:

我正在使用 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# 中使用可序列化的隔离级别?我是不是做错了什么?

P.S.:我注意到如果我使用这个命令:

DBCC useroptions;

我看到隔离级别是serializable,但是如果我关闭Management Studio并再次连接,看到隔离级别是默认的readCommitted

所以我的问题是如何为我的数据库设置默认隔离级别。

【问题讨论】:

  • 我不明白。您已经在正确使用可序列化事务。你能用不同的方式解释你想要什么吗?

标签: c# sql-server-2008 entity-framework transactions


【解决方案1】:
  • 默认 EF 事务隔离级别基于使用的数据库提供程序。

  • ef 代码中未指定的隔离级别应导致数据库服务器的默认隔离级别。

  • 在 SQL Server 中,默认隔离级别是 READ COMMITED。

  • 所以你不需要在你的 EF 代码上指定 IsolationLevel。如果你在 DB 端设置它,它也会作为 EF 的默认 IsolationLevel。

如何在 DB Check Isolation Levels in the Database EngineSET TRANSACTION ISOLATION LEVEL (Transact-SQL) 上更改 IsolationLevel

更新

要更改 isolation level 在 SSMS 上运行下面提到的命令:

USE YourDatabaseName;
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

用于检查是否应用?

USE YourDatabaseName;
GO
DBCC useroptions

MSDN 说:

一次只能设置一个隔离级别选项,并且 保持为该连接设置,直到它被显式更改。全部 在事务中执行的读操作在 指定隔离级别的规则,除非在 语句的 FROM 子句指定不同的锁定或版本控制 表的行为。

希望对你有帮助。

【讨论】:

  • @usr 不。在这里,我的意思是不要更改默认隔离级别。如果有人想更改 DB(或 sql server)的隔离级别,那么他们可以通过在 db 端来做到这一点。不需要通过将隔离级别设置为“Serializable”来在 ef 代码上执行此操作” 或者别的什么。这就是重点。我觉得我是对的?
  • 嗯,我在管理工作室尝试了命令TSQL,但是当我退出并再次进入时,隔离级别是Read Committed。如何永远设置隔离级别?
猜你喜欢
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多