当我发出“SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?
- 作者: 社会混混
- 来源: 51数据库
- 2022-10-20
问题描述
当我发出SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?我在任何地方都找不到它.应该是可序列化"吗?
What is the default transaction isolation level in Entity Framework when I issue "SaveChanges()"? I can not find it anywhere. Shall it be "Serializable"?
推荐答案
SaveChanges 使用当前存储提供程序的 DbTransaction 实现.这意味着默认事务隔离级别设置为数据库服务器的默认值.在 SQL Server 中,它是 READ COMMITTED.如果要更改隔离级别,可以使用 TransactionScope.您还可以在派生上下文中覆盖 SaveChanges 并在覆盖方法中直接将 base.SaveChanges() 包装到范围.
SaveChanges uses implementation of DbTransaction for current store provider. It means that default transaction isolation level is set to default value for the database server. In SQL Server it is READ COMMITTED. If you want to change isolation level you can use TransactionScope. You can also override SaveChanges in your derived context and wrap base.SaveChanges() to the scope directly in overriden method.
public override void SaveChanges()
{
// Default isolation level for TransactionScope is Serializable
using (var scope = new TransactionScope())
{
base.SaveChanges();
scope.Complete();
}
}
您可以进一步改进此代码以允许您将隔离级别传递给 SaveChanges 等.一旦您开始更改隔离级别,您应该始终如一地执行此操作.这意味着每次要运行事务时都应该定义隔离级别,因为 隔离级别是按连接配置的 和连接在使用连接池时被重用.
You can further improve this code to allow you passing isolation level to SaveChanges etc. Once you start changing isolation levels you should do it consistently. It means you should define isolation level each time you want to run a transaction because isolation level is configured per connection and connections are reused when using connection pooling.
EF6 中的默认事务级别已更改为 READ COMMITTED SNAPSHOT
Default transaction level in EF6 has changed to READ COMMITTED SNAPSHOT
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
