Ошибка в общем методе хранилища для Entity Framework - PullRequest
1 голос
/ 14 июля 2010

Я пытаюсь создать универсальный метод для использования в моем базовом классе для моих репозиториев, и у меня возникла проблема.Вот метод ...

        public virtual T First(System.Linq.Expressions.Expression<Func<T, bool>> where, List<string> properties)
    {
        IQueryable<T> query = null;
        if (where != null)
        {
            query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString())).Where(where);
        }
        else
        {
            query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString()));
        }

        foreach (string s in properties)
        {
            query = query.Include(s);
        }

        T _result = (T)query.First();

        return _result;
    }

Когда я запускаю код, он выдаёт мне эту ошибку:

«Компания» не может быть разрешена в текущей области или контексте.Убедитесь, что все ссылочные переменные находятся в области видимости, что необходимые схемы загружены и что на пространства имен ссылаются правильно.Почти экранированный идентификатор, строка 1, столбец 1.

У меня есть идея, почему это происходит, я просто не знаю, как это исправить.Я думаю, что он делает это, потому что мой ObjectContext не знает об объекте «Компания», но знает «Компании».Любые идеи о том, как это исправить ??

Ошибка происходит в этой строке:

T _result = (T) query.First ();

Спасибо!

Ответы [ 2 ]

7 голосов
/ 14 июля 2010

Дэн, получите имя набора сущностей примерно так:

string entitySetName = context.MetadataWorkspace
                        .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace)
                        .BaseEntitySets.Where(bes => bes.ElementType.Name == typeof(T).Name).First().Name;

string name = String.Format("{0}.{1}", context.DefaultContainerName, entitySetName);

query = context.CreateQuery<T>(name).Where(where);

Выполнение этого разрешит правильное имя множественного числа для запроса.

Хотя лучше всего использовать метод Юрия.

РЕДАКТИРОВАТЬ Кстати, вы должны вернуть FirstOrDefault() вместо First() в случае, если запрос не возвращает сущностей (он выдаст InvalidOperationException).

6 голосов
/ 14 июля 2010

Попробуйте использовать

 query = _context.CreateObjectSet<T>().Where(where);

вместо

 query = _context.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name.ToString())).Where(where);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...