を見て、アプリの際にIDocumentSession
起動(アプリが閉じられるまで、それを閉じることはありません)を作成するには、私はこれを行うことにより、オプティミスティック同時実行を使用することができます:RavenDBキャッチ22 - 楽観的並行性とRavenDBして他のクライアントからの変更点
public class GenericData : DataAccessLayerBase, IGenericData
{
public void Save<T>(T objectToSave)
{
Guid eTag = (Guid)Session.Advanced.GetEtagFor(objectToSave);
Session.Store(objectToSave, eTag);
Session.SaveChanges();
}
}
別のユーザーがそのオブジェクトを変更した場合、保存は正しく失敗します。
しかし、アプリの存続期間中に1つのセッションを使用すると、ドキュメントの他のインスタンス(ジョー、5つのキュービクル)からの変更がドキュメントに表示されます。私もこれを試してみたが、それはジョーの変更のいずれかが表示されませんでした:
public class CustomVariableGroupData : DataAccessLayerBase, ICustomVariableGroupData
{
public IEnumerable<CustomVariableGroup> GetAll()
{
return Session.Query<CustomVariableGroup>();
}
}
注:私はこれを行うと、私はジョーの変更を見ていない私があれば、今すぐ
return Session.Query<CustomVariableGroup>().Customize(x => x.WaitForNonStaleResults());
を他の方法を行って、データベースにアクセスするすべてのメソッド内にIDocumentSession
を作成すると、それに反対の問題が発生します。新しいセッションがあるので、私はジョーの変化を見ることができます。 Buuuuuuut ...私は楽観的な同時性を失う。保存する前に新しいセッションを作成すると、空のGUIDが生成されて失敗します。
Guid eTag = (Guid)Session.Advanced.GetEtagFor(objectToSave);
何が欠けていますか?各メソッド内またはアプリケーションレベルでセッションを作成しない場合は、正しいスコープは何ですか?オプティミスティックな同時実行性の利点を得るにはどうすればよいですか?とは、Session.Query()を実行するときに他人の変更を見ることができますか?
Btw、アプリケーションの種類は何ですか。 WebまたはWindows? –
これはWPF Windowsアプリケーションです。 –