事务提交后,另一个连接无法访问插入的行
Inserted row is not accessible for another connection after transaction commit
我们在将 EF 6 与 MSSQL 和 MassTransit 与 Rabbit MQ 结合使用时遇到了一个非常奇怪的问题。
场景如下:
- 客户端应用程序在数据库中插入一行(首先通过 EF 代码 - 隐式事务仅在 DbContext SaveChanges 中)
- 客户端应用程序通过 MassTransit 发布行的 ID
- Windows 消费者服务处理消息
- 一开始找不到该行,重试几次后,该行出现了
我一直认为在提交后该行会被保留并可供其他连接访问...
我们在数据库中有 ALLOW_SNAPSHOT_ISOLATION。
这是什么原因,有什么方法可以确保在将 Id 发布到 MQ 之前可以访问该行?
如果您依赖于另一个事务的完成,然后您的事件处理程序才能继续,您需要让您读取可序列化。否则,事务相互隔离,写入事务的结果尚不可用。您的写入可能还需要可序列化,具体取决于查询的结构。
是的,消费者运行那么快。
我们在将 EF 6 与 MSSQL 和 MassTransit 与 Rabbit MQ 结合使用时遇到了一个非常奇怪的问题。
场景如下:
- 客户端应用程序在数据库中插入一行(首先通过 EF 代码 - 隐式事务仅在 DbContext SaveChanges 中)
- 客户端应用程序通过 MassTransit 发布行的 ID
- Windows 消费者服务处理消息
- 一开始找不到该行,重试几次后,该行出现了
我一直认为在提交后该行会被保留并可供其他连接访问...
我们在数据库中有 ALLOW_SNAPSHOT_ISOLATION。
这是什么原因,有什么方法可以确保在将 Id 发布到 MQ 之前可以访问该行?
如果您依赖于另一个事务的完成,然后您的事件处理程序才能继续,您需要让您读取可序列化。否则,事务相互隔离,写入事务的结果尚不可用。您的写入可能还需要可序列化,具体取决于查询的结构。
是的,消费者运行那么快。