0

Я новичок в инфраструктуре сущности.Наилучшее перегруженное соответствие метода для 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 (строка, System.Data.Objects.ObjectContext)' имеет некоторые недопустимые аргументы

+1

Первый аргумент выглядит хорошо, так что вы подумали о том, действительно ли ваши «AWEntities» являются «System.Data.Objects.ObjectContext» или нет? Согласно тексту ошибки, второй аргумент этого конструктора должен быть «System.Data.Objects.ObjectContext». –

+0

@JeppeStigNielsen :: «AWEntities» - это открытый класс, наследуемый от 'DbContext' –

+0

Когда вы говорите' DbContext', это 'System.Data.Entity.DbContext'? Поскольку этот класс не получается из 'System.Data.Objects.ObjectContext', как того требует подпись конструктора. –

ответ

1

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

((IObjectContextAdapter)context).ObjectContext; 

Что бы сделать ваш запрос выглядеть следующим образом:

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

Я не знаю, если Entity Структурированные запросы продвинуты больше. Я подумал бы, если возможно, использовать LInQ.

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

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

2

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

+0

«AWEntities» - это открытый класс, наследуемый от 'DbContext' –