Наилучшее совпадение перегруженного метода для XXX имеет недопустимые аргументы

Я новичок в структуре сущностей.

Я пытаюсь написать следующий метод, но я получаю ошибку во время компиляции.

 protected static void EntitySQLQuery(AWEntities context)
        {
            string cmd = @"SELECT VALUE c FROM AWEntities.Person AS c WHERE c.FirstName = @FirstName";

            ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, context);//Error


        }

Наилучшее совпадение перегруженного метода для 'System.Data.Objects.ObjectQuery.ObjectQuery(string, System.Data.Objects.ObjectContext)' имеет недопустимые аргументы.

2 ответа

Решение

Это один из самых запутанных моментов Entity Framework. Вы должны понять, что ObjectContext - это старый способ выполнения EntityFramework, примерно в 2010 году. Это было до DbContext (и сначала кода). Вы все еще можете добраться до ObjectContext, приведя ваш DbContext к IOjbectContextAdapter, например так:

((IObjectContextAdapter)context).ObjectContext;

Что сделает ваш запрос похожим на это:

ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, ((IObjectContextAdapter)context).ObjectContext);

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

var firstname = "Fred";
return from person in AWEntities.Person
       where person.FirstName = firstname
       select person;

Если вы читаете книги Джули Лерман, я настоятельно рекомендую вам взять все три. Первая представляет собой огромную гробницу, объясняющую все основные принципы (и написана вокруг способа ведения дел ObjectContext), вторая - более практичная в современном мире code-first/dbcontext.

Ваш AWEntities context объект не признается как ObjectContext, Пожалуйста, проверьте тип вашего объекта. Взгляните на определение ObjectContext и конструктора ObjectQuery

Другие вопросы по тегам