2014/01/04

[Entity Framework] LINQ で「この Command に関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります。」エラーが出たときの対処方法


Entity Framework で LINQ を使用していると、タイトルのようなエラーが表示されどうしようもなくなってしまいました。Visual Studio と SQL Server の再インストールをしてもだめでした。

現象は、データベースを作成するときは正常終了し、2回目以降の LINQ によるデータ取得の時に起きます。

エラーが発生する場所は、ICollection<> で宣言している子エンティティのコレクションの取得時です。

原因がさっぱり分からず、Visual Studio と SQL Server を再インストールしてもだめでしたが、ようやく原因を特定することができました。

原因は、LINQ が DataReader を複数オープンしようとしているためです。デフォルトではこの挙動が禁止されているので、エラーが発生してしまいます。

対処方法は、接続文字列に以下の文字列を追加し、DataReader を複数オープンすることを許可することです。

MultipleActiveResultSets=true;

ただ、この現象が発生するようになったのは、Include メソッドを使ってからなんですよね。なにかしらの関係があるかもしれません。

■参考サイト


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから