2017-01-10 6 views
1
namespace MyMain.Controllers 
{ 
    public class Home 
    { 
     **//Open First Db Connection Here** 
     public MyDbConEntities db = new MyDbConEntities(); 

     public ActionResult Index() 
     { 
      var user = db.User.FirstOrDefault(); 

      **//Open second Db Connection Here** 

      using (var myTask = new MyTask1()) 
      { 
       myTask.Execute(user.Id); 
      } 
     } 
    } 
} 

namespace MyMain.Task 
{ 
    private MyDbConEntities db = new MyDbConEntities(); 
    public class MyTask1 : IDisposible 
    { 
     private int Id; 
     public MyTask1(int id) 
     { 
      db = new MyDbConEntities(); 
      Id = id; 
     } 

     public void Execute() 
     { 
      **//Open thidr Db Connection Here** 
      using (var mySubTask = new MySubTask1()) 
      { 
       mySubTask.Execute(Id); 
      } 

      db.UserDetails.FirsOrDefault(x => x.UserId = Id) 
     } 

     public Dispose() 
     { 
      db.Dispose(); 
     } 

    } 
} 

こんにちは、私の質問は、同時に複数のDbConを開きます。複数のDbConオブジェクト

上記のコードでは、私の考えを示してみました。私の目的は、それぞれ別々のタスククラスでDbConを開きます。しかし時々、私は別のタスククラスから1つのタスクを呼び出します。

時には、同時にいくつかのdbConを短時間開くことができます。 MyMain/Home Class dbオブジェクトをタスククラスのインスタンスとして送信したくない。私はエラー処理のケースを考えました。たとえば、MySubTask1でエラーが発生した場合 (dbオブジェクトをインスタンスとして使用すると、dbConを閉じてシステム全体が失敗する可能性があります)

私はこれを実装しようとしています...私の考えはどう思いますか?

あなたはこの方法では、巨大なデータベースとユーザーのためのサーバー上の問題となる可能性が?。私の手掛かりを与えることができます。

何この方法でのUnitOfWorkを使用するでしょうか?デザインN-ティルアプリケーションベースで

+0

よより良いパフォーマンスのためにUnitOfWorkにDbContextを渡すことができます.implementation要求パターンごとのコンテキスト –

+0

あなたは何を明確にしましたか?私は作業単位が使用できることを理解しています。また、私のアイデアは、私がサーバー上のリリースとして公開するときに問題を作成しませんか?だから私は同時に複数のdbconを開くことができます。ではない?あなたの興味のためにありがとうたくさん。 –

+0

なぜこの作業をしたいですか? –

答えて

0

on EF私たちが使用する各クラスとメソッドで、DbContextのインスタンスを作成するのは一般的ではありません。

このようにして、 トランザクション中に異なるタスクを実行する能力は破棄されます。

ため、異なる層にコンテクストのこの共有Instansを行うことによって要求パターンかのUnitOfWork、 パーこの問題使用コンテキストを解決します。

作品のモデル単位の重要性とコール

A)パフォーマンスの向上

B)同時実行

Cを発行) 正しい時にそれを共有します取引の利用

関連する問題