2011-01-21 21 views
2

私はすべてのクエリのために、この行を書いて自分自身を発見しています:LINQのデータコンテキストの抽象化

using (MyDataModel thisDataContext = new MyDataModel()) 
{ 
    linq query 
} 

は、データコンテキストを宣言するための良い方法はありますか?

ありがとうございました。

答えて

1

あなたが表すDataServiceクラスを作成することができ、あなたのDataContext
例えば:

public class BaseDataService:IDisposable 
    { 
     protected MyDataModel thisDataContext = null; 
     public BaseDataService(string connection) 
     { 
      this.thisDataContext = new MyDataModel (connection); 
     } 


     public void Dispose() 
     { 
      this.thisDataContext.Connection.Close(); 
      this.thisDataContext.Dispose(); 
     } 


    } 

が、あなたのニーズを満たす方法を作成 例えば:

public class YourEntityDataService:BaseDataService 
    { 

     public YourEntityDataService(string connection):base(connection) 
     { 

     } 

     public YourEntity GetYourEntity() 
     { 
//LINQ CODE 
     } 

     public void SaveYourEntity (YourEntity entityToSave) 
     { 
//LINQ CODE 
     } 
} 
0

実際にデータコンテキストオブジェクトを現在のスレッドにThread Staticオブジェクトとして配置しました。これを行うと、コンテキストオブジェクトを必要とする各メソッドに渡す必要がなくなります。

私たちはn層アーキテクチャを持ち、クライアントから中間層が呼び出されると、コンテキストオブジェクトを新しく作成してスレッドに配置します。次に、データベース呼び出しを行う必要のあるメソッドは、コンテキストオブジェクトをスレッドから取り出すだけです。したがって、実際にコンテキストオブジェクトを作成している中間層コードには、非常に少数の場所しかありません。実際には、ちょうど1つの場所、私は正しく思い出す。

この方法でも、私たちのコンテキストオブジェクトはそれほど長い間生きていません(これは良いことです)。