2009-09-03 3 views
3

あなたはSQLにLINQを使用して、単純にDataContextはいつIQueryableを公開して公開しますか?現時点では人気があるようですとして

IQueryable<T> FetchAll<T>(); 

としてリポジトリを実装する場合、その後、リポジトリは、リポジトリの外で利用可能なままのDataContextを設定する必要があります。

私の質問は、DataContextはどのように処理されるのですか? リポジトリ外のコードによって例外が生成された場合はどうなりますか? データベース接続がリークしていますか?

おかげ

答えて

3

Why you dont need to call dispose on DataContext

まとめのDataContextは(あなたがデータにアクセスしたとき)、クエリが呼び出され、接続を開き、クエリが終わったときにそれを閉じます。

+0

ありがとう、それは素晴らしいです!私は何かが欠けているに違いないことを知っていました。私はどこにも公開されていない例を見たことがあります。IQueryable DataContext –

2

リポジトリはIDisposableを(およびリポジトリが配置されているのDataContextの処分)を実装してください。今すぐあなたのリポジトリのAPIは

using (var repository=new MyRepository) //or use a ServiceLocator or Factory 
{ 
    var myObjects = repository.FetchAll().Where(obj=>obj.Foo == "bar"); 
    //do something with myObjects 
} 

そして今、あなたのリポジトリが正しくのDataContextを処分し、すべてが世界でよくあるようなものです。

+0

こんにちはマイク、私は心の後ろにこのような考えをしましたが、まだどこにも見ませんでした。すべての書籍やブログなどはIQueryableをまっすぐに使っています。リポジトリIDisposableを 'done thing'にしていますか? –

+0

それは疑問点であるように見えます。リポジトリDisposableを使用すると、新しいオブジェクトをオブジェクトに添付したり、トランザクションを作成したりするためにObjectContextを保持するなどのトリックを行うことができます。 –

関連する問題