我将尝试将EF 6的默认事务隔离级别设置为快照隔离,但是它并没有生效,而是一直使用Readcommitted。以下是我迄今为止所做的内容:
我通过执行以下命令在我的SQL Server 2014数据库上启用了SQL Server快照隔离:
我通过执行以下命令在我的SQL Server 2014数据库上启用了SQL Server快照隔离:
ALTER DATABASE MyDb
SET READ_COMMITTED_SNAPSHOT ON
GO
ALTER DATABASE MyDb
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
我有一个 DbContext 实现,并编写了以下 Linqpad 脚本来输出正在使用的隔离级别,它始终显示“Readcommitted”,这是不好的。以下是 Linqpad 脚本:
void Main()
{
this.Database.SqlQuery<string>(@"SELECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncomitted'
WHEN 2 THEN 'Readcomitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
where session_id = @@SPID
").Single().Dump();
}
我曾经看到有人通过 new 事务的方式显式地设置事务隔离级别,但是我希望将快照隔离作为默认的事务类型,比如在我的 DbContext 的 OnModelCreating 重写中。这是否可能?或者总是需要在显式事务中进行操作?我们使用 Unity IoC 来注入我们的 DbContext,目前在代码中没有声明任何显式事务...