gpt4 book ai didi

c# - Entity Framework 和事务隔离级别

转载 作者:IT王子 更新时间:2023-10-29 04:24:35 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.0。现在我需要在读取或写入表时限制对表的访问。可能这与事务隔离级别有关。

我该怎么做?

更新

这是我的

using (var db = new MyDb())
{
using (TransactionScope scope = new TransactionScope())
{
var item = db.MyItems.Single(x => x.Id == 5);
item.Price = 12;
db.SaveChanges();
scope.Complete();
}
}

但是,当我在 使用 (TransactionScope scope 的任何行放置断点并且当我在那里停下来然后我转到 Sql Server Management Studio 并执行选择查询(甚至更新!) 从在事务内部使用的表中,由于某种原因我没有收到错误。但为什么呢?它不能允许我在事务执行时读取数据。

最佳答案

默认情况下,交易有一个 IsolationLevel可序列化。可序列化是最高级别。它要求事务在允许任何其他事务对数据进行操作之前完成。

它有以下限制:

  • 语句无法读取已修改但尚未修改的数据由其他事务提交。
  • 没有其他事务可以修改当前事务已读取的数据,直到当前交易完成。
  • 其他事务无法插入新行将落在任何读取的键范围内的键值当前事务中的语句直到当前事务完成。

这是一篇很棒的博文,解释了如何将事务与 Entity Framework 结合使用:Entity Framework transaction scope examples

更新

在 Entity Framework 6 中,对于使用 Code First 创建的数据库,默认 IsolationLevel 更改为 READ_COMMITTED_SNAPSHOT,可能会允许更高的可扩展性和更少的死锁。查看future spec of EF 6

关于c# - Entity Framework 和事务隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12795184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com