sql >> データベース >  >> RDS >> PostgreSQL

postgresqlおよびado.netエンティティデータモデルのMultipleActiveResultSets

    複数のアクティブな結果セット(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();

    これがお役に立てば幸いです。



    1. 行全体の現在の合計を計算し、IDでグループ化する

    2. Laravel5.2-Eloquentテーブルのカスタム主キーとして文字列を使用すると0になります

    3. node-oracledbを使用してLDAPサーバーに接続するにはどうすればよいですか?

    4. Javaで例外処理メソッドとして使用されるmysql固有のインデックス