2016-09-08 12 views
0

私はRavenDBを使用しており、dbアクションごとにdbセッションを開く必要があります。たとえば
(connection.opensessionを使用して)複写の代わりに使用するデザインパターン

using (IDocumentSession session = _ravenContext.OpenSession()) 
    {       
     session.Store(entity); 
     session.SaveChanges(); 
    } 

GetByIdコード: は、コード作成

using (IDocumentSession session = _ravenContext.OpenSession()) 
     {       
      var entity= session.Load<T>(entityId); 

     } 

をしかし、私は、各アクションの使用()文(作成、更新、クエリを記述する必要はありませんし、等)
コード内でusing()ステートメントを重複せずに、より一般的なものを書くためのデザインパターンや別の方法はありますか?

ありがとうございます

+0

'実行(アクション ExecuteActionメソッド)' – Will

+0

どのような戦略についてのパターン?オープンセッションで呼び出すコードをラムダを使ってメソッドに挿入することができます。 – Baldrick

+0

ラムダはどのように使用できますか? 説明してください。私が与えた2つの例に注意してください。ありがとう – Shir

答えて

1

リクエストを処理するためにセッションを1回開く必要があります。セッションのアイデアは、負荷を軽減するために多くの状態を維持するということです。

特に、単一のデータベース操作でセッションを開くことは、おそらく悪い考えです。

一般的なシナリオは、要求を開始するときに開き、完了したら変更を保存します(&)。

ことの例は、ここで見ることができます:

https://ayende.com/blog/4101/do-you-need-a-framework

+0

ありがとうございます。あなたの例によると、セッションはリクエストごとに開かれます。 しかし、すべての要求が虐殺を必要とするわけではありません。 – Shir

+0

セッションを開くことは非常に安く、ここに余分な費用はありません –

+0

私はASP MVCプロジェクトとWinformプロジェクトを持っています。彼らはどちらもレイヴンプロジェクトを使用しています。 winformプロジェクトは、常に実行されているジョブです。では、winformプロジェクトでセッションを開く適切な場所はどこですか? – Shir

関連する問題