事务提交后,无法通过其他连接访问插入的行

时间:2015-03-26 10:26:18

标签: sql-server entity-framework rabbitmq masstransit

我们有一个非常奇怪的问题,使用带有MSSQL的EF 6和带有Rabbit MQ的MassTransit。

方案如下:

  1. 客户端应用程序在数据库中插入一行(首先通过EF代码 - 仅在DbContext SaveChanges中隐式事务)
  2. 客户端应用程序通过MassTransit
  3. 发布行的ID
  4. Windows服务与消费者处理消息
  5. 最初未找到行,经过几次重试后,该行显示为
  6. 我一直认为在提交之后,该行会被持久化并且可以被其他连接访问...

    我们在数据库中有ALLOW_SNAPSHOT_ISOLATION。

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

1 个答案:

答案 0 :(得分:1)

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

是的,消费者很快就会这么做。