1

動的WhereおよびInclude. 以下のコードを使用していますが、インクルード リストにあるナビゲーション プロパティにアクセスしようとすると、オブジェクト コンテキストが閉じているというエラーが表示されます。

これらのオブジェクトをロードすることになっていない.Include()ので、ObjectContext を開いたままにしておく必要はありませんか?

public static List<T> GetList<T>(Func<T, bool> where, string[] includes)
    where T : EntityObject
{
    using (var context = new TContext())
    {
        ObjectQuery<T> q = context.CreateObjectSet<T>();
        foreach (string navProperty in includes)
        {
            q.Include(navProperty);
        }

        return q.Where<T>(where).ToList();
    }
}

エラーの原因となるコード:

var x = DAL<MyContext>.GetList<MyEntity>(
                p => p.Id == 1
                , new string[]{ "Type" } );

var y = x.Type;  // Throws an error that context has been closed

私はEFが初めてで、まだそれを理解しようとしているので、ここである種のばかげた間違いを犯しているに違いないと感じています。

4

1 に答える 1

3

再割り当てしていませんq-これで修正されます:

    foreach (string navProperty in includes)
    {
        q = q.Include(navProperty);
    }

オリジナルを変更するのではなく、それぞれがnew を返す拡張メソッドを使用していることを思い出してください。IQueryable<T>

于 2011-08-23T16:09:38.920 に答える