在单个事务范围内,我正在尝试将数据保存到两个单独的Raven数据库(在同一个Raven服务器上)。
但是,第二个会话中的更改未保存到服务器。
以下是我正在使用的代码:
var documentStore = new DocumentStore { Url = "http://localhost:8081/" };
documentStore.Initialize();
documentStore.DatabaseCommands.EnsureDatabaseExists("database1");
documentStore.DatabaseCommands.EnsureDatabaseExists("database2");
using (var ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
using (var session1 = documentStore.OpenSession("database1"))
{
session1.Store(new Entity {Id = "1"});
session1.SaveChanges();
}
using (var session2 = documentStore.OpenSession("database2"))
{
session2.Store(new Entity {Id = "2"});
session2.SaveChanges();
}
ts.Complete();
}
我可以看到session1
中的更改已保存到database1
,但session2
中的更改未保存到database2
。我尝试过使用RavenDb build 992并构建2360
根据Raven文档,支持跨数据库的事务。
如何从session2
提交更改?
答案 0 :(得分:2)
分布式事务需要时间来提交。您可以在检查结果之前使用Thread.Sleep
进行短暂等待,也可以在会话中设置检查结果的特殊属性:
session.Advanced.AllowNonAuthoritativeInformation = false;
这似乎是一个错误,但它实际上是设计的。阅读RavenDB文档中的Working with System.Transactions。
(仅供参考 - 在我检查之前我也不知道。)