3

私はこの投稿のタイトルが何人かの人々をうんざりさせなければならないことを知っています。私は2011年12月からRavenDBを使用していますが、ドキュメントDBの使用に適合しない方法でデータをモデル化していることに気付きました。まず、私は完全にそれを理解します。第二に、私の現在の状況を踏まえて、以下のシナリオを正しく機能させる方法があることを望んでいます。

シナリオ:データベース内の特定のFooドキュメントを削除したい。ただし、そのドキュメントが別のドキュメントによって参照されている場合は、削除したくありません。だから、私はこれをしました:

public void Delete(Foo foo)
{
    VerifyFooNotUsedByBar(foo);  // Make sure no bars reference this foo

    VerifyFooNotUsedBySnuh(foo);  // Make sure no snuhs reference this foo

    // What happens if some other user causes this foo to be referenced
    // by a bar, right now?

    new GenericData().Delete(foo);
}

ただし、これは機能します... fooをチェックした、他の何かによってfooが参照される可能性があります。このメソッド全体が完了するまで、他の変更をロックする方法はありますか?

答えが「いいえ。この方法でドキュメントDBを使用することで自分自身を台無しにした」であるかどうかはわかります。現在の問題を回避する方法があることを願っています。

4

1 に答える 1

2

ボブ、そうではない、違います。これを回避するトランザクションがあったとしても、ロックされません。あなたができることは、参照がメタデータで維持されることを確認することです。したがって、Fooを参照しているときは、Fooのメタデータを更新して、そうしていることを通知する必要があります。それはトランザクションの真実の単一のポイントを引き起こします。

于 2012-07-16T07:04:52.877 に答える