【问题标题】:Inserted row is not accessible for another connection after transaction commit事务提交后,另一个连接无法访问插入的行
【发布时间】:2015-03-26 10:26:17
【问题描述】:

我们在使用带有 MSSQL 的 EF 6 和带有 Rabbit MQ 的 MassTransit 时遇到了一个非常奇怪的问题。

场景如下:

  1. 客户端应用程序在数据库中插入一行(首先通过 EF 代码 - 仅在 DbContext SaveChanges 中的隐式事务)
  2. 客户端应用程序通过 MassTransit 发布行的 ID
  3. 带有消费者的 Windows 服务处理消息
  4. 最初未找到行,重试几次后出现行

我一直认为,在提交之后,该行会被持久化并且可以被其他连接访问......

我们在数据库中启用了 ALLOW_SNAPSHOT_ISOLATION。

这是什么原因,有什么方法可以确保在将 Id 发布到 MQ 之前可以访问该行?

【问题讨论】:

    标签: sql-server entity-framework rabbitmq masstransit


    【解决方案1】:

    如果在事件处理程序可以继续之前,您依赖于另一个正在完成的事务,您需要让您读取可序列化。否则,事务相互隔离,写事务的结果尚不可用。您的写入可能还需要可序列化,具体取决于查询的结构。

    是的,消费者跑得这么快。

    【讨论】:

    • 如果我理解正确,如果我在客户端进行插入并在消费者中进行可序列化读取,它将正常工作(我的意思是总能找到该行)?
    • 我已经设置了可序列化的交易,如果一切正常,我会接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    相关资源
    最近更新 更多