EF4でforeachを使用する

EntityFramework4でLinqを利用して取得したデータをforeachでぶんぶん回して処理を仕様とすると「DataReaderがCloseのため…」というエラーが発生することがあります。いろいろ調べてみたところ接続文字列に ” multipleactiveresultsets=true” を追加することで解決しました。

foreach (C#) または For Each (Visual Basic) 列挙で Load メソッドを呼び出すと、Entity Framework は新たにデータ リーダーを開こうとします。 この操作は、接続文字列で multipleactiveresultsets=true を指定して複数のアクティブな結果セットを有効にしていない限り失敗します。 詳細については、MSDN の「複数のアクティブな結果セット (MARS) の使用」を参照してください。 クエリの結果は、List コレクションに読み込むこともできます。この場合、データ リーダーが閉じ、コレクションを列挙して参照エンティティを読み込むことができます。

ということで無事解決。

参考 関連オブジェクトの読み込み (Entity Framework) http://msdn.microsoft.com/ja-jp/library/bb896272.aspx