新しいオブジェクトをインスタンス化するたびに作成しているオブジェクトコンテキストを適切に破棄する方法を見つけることができない問題が発生しています。 。リポジトリ(DAL)を実装する際のオブジェクトコンテキストの破棄とTDD用のMocking DAL
public class OrderBLL{
var _iOrderLineDal;
public OrderBLL(){
_iOderLineDal = new OrderLineDal(new entityOBject(dbconnectionstring);
}
public OrderBLL(iOrderLineDal mockOrderLineDal){
_iOrderLineDal = mockOrderLineDal;
}
}
だから、問題は私のサービスはOrderBLLの新しいインスタンスを作成し、任意の新規受注は、データ・ベースであるかどうかを確認するための方法を実行し、30秒ごとこと、です。
30秒ごとに、処理されていない新しいentityObjectを作成します。コードの古い実装はusingステートメントを使って書かれました。
public bool HasNewOrders(){
using(var entityObject = new entityObject(dbconnectionString)){
var newOrders = entityObject.GetNewOrders();
}
//some logic
}
このusingステートメントを使用しての問題は、私はentityObjectをモックと簡単にこのOrderBLLクラス内のいずれかの方法でユニットテストを書くことができないです。
私はOrderLineDal内にdisposeメソッドで処分しようとしましたが、一度disposeというデータが得られました。これは最初の反復はうまくいきましたが、次の30秒後の反復では、entityObjectが処分されて使用できないと言います。
私はこのリポジトリパターンを実装して、すべての新しいentityObjectを処分できる方法はありますか?私はDALを偽造することができます。ユニットテスト?
私はEF 4で作業していますが、コードファーストが設定されていないため、POCOがありません。
これは私がやろうとしていたものです。しかし、私は作成されているコンテキストを処分する方法を理解していませんでした。私はCastle Windsorを使用して調べます。その間、私はusingステートメントでOrderBLLをラップしています。OrderBLLはIdisposableを継承しています。次に、私は_dbcontextを破棄するOrderBLLにpublic disposeメソッドを持っています。使用staetmentはOrderBLLで作成したdisposeメソッドを呼び出しますか? – Mitch
OrderBLLがIDisposableを実装する場合は、OrderBLL.dispose()メソッドのdbContextでdisposeを呼び出す必要があります。あなたはusingステートメントでOrderBLLをラップする必要があります。テストのためにNSubstitute(これはあなたのインターフェースが重要になる場所です)のような模倣ライブラリを見てみることをお勧めします。私はどのように表示するために上記の答えを更新します。 – Andrew