【问题标题】:EF consistency between two or more reads两个或多个读取之间的 EF 一致性
【发布时间】:2021-08-21 04:02:00
【问题描述】:

在微软关于 EF 的文档中的 this 页面中,它是字面意思的

实体框架不会将查询包装在事务中

如果我是对的,这意味着 sql 读取并不包含在事务中,因此我们代码中的每个选择都是独立执行的。但是如果是这样的话,我们能保证两次读取彼此之间是一致的吗?在典型情况下,如果 A 和 B 之间的传输在读取之间开始(在不同的连接中),是否有保证 A 的加载量和 B 的加载量的总和将是正确的(在某些连接中) A的读音和B的读音? Entity Framework 能否以某种方式解决这种情况?

【问题讨论】:

    标签: entity-framework transactions


    【解决方案1】:

    EF 中的内置解决方案是客户端optimistic concurrency。更新时,EF 将构建一个查询,以确保要更新的行自读取后未更改。

    配置为并发令牌的属性用于实现 乐观并发控制:每当更新或删除操作 在 SaveChanges 期间执行,并发令牌的值 将数据库与 EF Core 读取的原始值进行比较。

    如果值匹配,则操作可以完成。如果值不 匹配,EF Core 假定另一个用户执行了冲突 操作并中止当前事务。

    您还可以选择以您选择的任何隔离级别加入Transactions,这可能会提供类似的保护。或者对目标数据库使用带有锁定提示的 Raw SQL 查询。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2016-11-18
      相关资源
      最近更新 更多