複数のアクティブな結果セット(MARS)は、SQL Server 2005で導入された機能であり、postgresなどの他のデータベースシステムでは使用できないため、接続文字列でオンにすることはできません。
直面しているエラーは、1つのオープンデータリーダーで2つのクエリを実行しようとした結果です。 ie Entity Frameworkを使用する場合、これは通常 遅延読み込みがある場合に発生します オンにすると、レイジープロパティが親エンティティと同じリーダーに読み込まれます。たとえば、これに類似したコードは次のエラーを生成する可能性があります:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}
1行目では、Linqクエリのみを準備しているため、データはフェッチされません。 foreach
を開始するとき DataReader
が開かれ、私たちの条件を満たすユーザーのコレクションが照会されますが、リーダーは閉じられていません。次に、foreach
内 遅延ロードされているUserのAddressプロパティに到達します。この遅延読み込みにより、同じ開いているDataReader
でクエリが実行されます。 例外が発生したのはそのときです。エラーを取り除きたい場合は、ToList()
を追加するだけです。 (またはクエリを実行させるもの)次のように行の終わりまで:
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
これがお役に立てば幸いです。