首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改隔离级别?

如何更改隔离级别?
EN

Stack Overflow用户
提问于 2013-01-26 20:10:48
回答 1查看 4.5K关注 0票数 6

我使用的是EF 4.0,并且我希望使用隔离级别serializable,因为在事务中,我希望在读取寄存器时阻塞寄存器。

在SQL Server中,我尝试使用以下命令更改隔离级别:

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

在C#中,我使用以下代码来尝试阻塞寄存器:

代码语言:javascript
复制
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对表colors进行查询,我可以得到记录。

然后,如果我执行保存的更改并获得scope.Clompete(),如果我尝试使用Management Studio进行查询,则什么也得不到,因为注册表被阻塞,所以当我完成C#代码时,注册表将被释放,并在Management Studio中获得结果。

所以我的问题是,如何在C#中使用可序列化的隔离级别?我做错了什么吗?

附言:我注意到如果我使用这个命令:

代码语言:javascript
复制
DBCC useroptions;

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 21:19:41

Server默认ef事务隔离级别基于使用的数据库provider.

  • Unspecified隔离级别EF代码中的隔离级别应导致数据库服务器的默认隔离级别。SQL
  • 中的
  • 默认隔离级别为READ COMMITED。
  • 因此您无需在EF code.If上指定
  • ,您可以在DB端将其设置为EF的默认IsolationLevel。

如何在DB Check 和上更改IsolationLevel

更新

对于更改isolation level,请在SSMS上运行下面提到的命令:

代码语言:javascript
复制
USE YourDatabaseName;
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

检查是否已应用?

代码语言:javascript
复制
USE YourDatabaseName;
GO
DBCC useroptions

MSDN说:

一次只能设置一个隔离级别选项,在显式更改之前,该选项将一直为该连接设置。除非语句的FROM子句中的表提示为表指定了不同的锁定或版本控制行为,否则在事务内执行的所有读取操作都将根据指定隔离级别的规则进行操作。

我希望这能对你有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14536805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档