Наилучшее совпадение перегруженного метода для 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