0

linq を使用して db から取得した一部のデータに問題があります。データにアクセスしようとすると、次の例外が発生します: System.ObjectDisposedException : ObjectContext のインスタンスが削除されたため、接続が必要なアクションに再度使用することはできません。これはコードです:

using (ProvaDbEntities DBEntities =     
    new ProvaDbEntities(Utilities.ToEntitiesConnectionString()))

            {
                ObjectQuery<site> sites = DBEntities.site;

                IEnumerable<site> q = from site in sites

                                      select site;


                {
                    ObjectQuery<auction> auctions = DBEntities.auction;

                    IEnumerable<auction> q1 = from auction in auctions

                                              where auction.site == this.Name

                                              select auction;

                    IEnumerable<IAuction> res = q1.Cast<IAuction>();

                    return res;

            }
        }
        catch(Exception e)
        {
            throw new UnavailableDbException("[GetAuctions]" + e.Message);
        }

誰かが私を助けることができますか?戦車ファビオ

4

1 に答える 1

3

はい -遅延評価される結果を返していますが、結果を取得するために使用されるデータ コンテキストを破棄しています。

オプション:

  • 結果を呼び出すなどToListして、結果を熱心にロードする
  • コンテキストを破棄しないでください (Entity Framework での状況はわかりません。LINQ to SQL ではこれを回避できますが、EF では適切ではない可能性があります)。
  • データの処理が終了したら、コンテキストを破棄します

この場合、最初のオプションを使用することをお勧めします。これは安全で簡単です。すでに結果フィルタリングしており、とにかくキャストしIEnumerable<IAuction>ているため、クエリを早期に具体化することの通常の欠点が発生する可能性はほとんどありません。(それでもIQueryable<T>の場合は、クエリに余分なビットを追加する機能を破棄し、それらは引き続き SQL に変換されます。)

于 2010-07-05T20:39:38.340 に答える