ObjectContext Закрытая ошибка при использовании Включить? - PullRequest
1 голос
/ 23 августа 2011

Я пытаюсь создать универсальный метод Get для Entity Framework с динамическими 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 и все еще пытаюсь это выяснить.

1 Ответ

3 голосов
/ 23 августа 2011

Вы не переназначаете q - это должно исправить:

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

Помните, что вы используете методы расширения, каждый из которых возвращает new IQueryable<T>, не изменяяоригинал.

...