複数のアクティブな結果セット(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
aDataReader
が開かれ、条件に一致するユーザーのコレクションが照会されますが、リーダーは閉じられません。次に、内部foreach
で遅延読み込みされているUserのAddressプロパティに到達します。この遅延読み込みにより、同じオープンでクエリが実行されDataReader
、例外が発生します。エラーを取り除きたい場合はToList()
、次のように行の最後に(またはクエリを実行させるもの)を追加するだけです。
var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();
これがお役に立てば幸いです。