1

1 つのトランザクション スコープ内で、2 つの別々の Raven データベース (同じ Raven サーバー上) にデータを保存しようとしています。

ただし、2 番目のセッションでの変更はサーバーに保存されていません。

私が使用しているコードは次のとおりです。

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保存されません。RavenDbビルド992とビルド2360で試しましたdatabase1session2database2

Raven のドキュメントによると、データベース間のトランザクションがサポートされています。

session2変更をコミットするにはどうすればよいですか?

4

1 に答える 1

2

分散トランザクションは、コミットするのに時間が必要です。結果を確認する前に で少し待つかThread.Sleep、結果を確認しているセッションで特別なプロパティを設定できます。

session.Advanced.AllowNonAuthoritativeInformation = false;

これはバグのように見えますが、実際には仕様によるものです。RavenDBドキュメントの「System.Transactionsの操作」を参照してください。

(ちなみに私も調べるまで知りませんでした。)

于 2013-05-15T16:12:55.753 に答える