2017-10-16 11 views
0

Session.SaveChanges()を傍受する方法を探しているので、同じセッションインスタンスを使用していくつかの追加作業を実行することができます(これは場合によっては便利です)。RavenDbを傍受する方法Session.SaveChanges()

編集:セッションを再使用についてのポイントは、私は同じトランザクションで実行する必要があるより多くの仕事を持っていることです。

私はすでにIDocumentStoreListenerを認識しています(使用しています)が、このインターフェイスは現在のセッションにアクセスできないため、役に立たないです。

SaveChangesの呼び出しをインターセプトして現在のセッションでハンドルを取得する方法について、RavenDbのマニュアルで何も見つかりません。誰かが方法を知っていますか?

+0

必要なものを行うことができます void AfterStore(string key, object entityInstance, RavenJObject metadata); を実装

は、Webアプリケーションのために、このですか?通常、MVCおよびWeb APIアプリケーションの場合、OWINコンテキストごとにドキュメントセッションを作成します。 –

+0

Webアプリケーションとwebjobs(またはその他のコンテキスト)の両方で動作する必要があります。我々は、それが解決するよりも多くの問題をもたらすので、要求ごとに1つのセッションを使用することから離れました。 私は今、解決策を考えていますが、実装する時間がありませんでした。私がそれをしたときに再び投稿します –

+0

リクエストごとにセッションを持つことでどのような問題が発生しているのか、興味があります。私はリクエストごとにセッションを使用して多数のWebアプリケーション(いくつかのエンタープライズ規模)を構築しました。これはかなりうまく機能しています。 –

答えて

0

新しいセッションを開くのは無料です(パフォーマンスに関して)IDocumentStoreListenerはあなたが探しているもののために考えられています。私はあなたが言うように他のことを知らない。あなたが保存されたエンティティに関するすべての情報を持っているし、その後、あなたが

+0

新しいセッションを開こうとするのは確かに「無料」ですが、必要なものではありません。私は同じ取引でより多くの仕事をする必要があります。私はこれについて明確になるように質問を更新しました。 OrenはCallContextを使ってセッションを隠すことを提案しています(https://groups.google.com/forum/#!topic/ravendb/bXeUJ3qVBpQ)、私はそれを検討しています。私は、シリアル化されている可能性があるので、セッションがCallContextに隠されているかどうかは分かりません。 –

+0

@Øyvindこれは回避策ですが、必要な処理を行うために前のストアを使用すると、何かが失敗した場合にfalseを返すか例外をスローするとどうなりますか? – Embri

+0

:_current_セッションを手にする方法。新しいものを開くのは簡単ですが、それは私が必要とするものではありません。 –

関連する問題