Как запустить SQL-запросы на EF? - PullRequest
2 голосов
/ 18 октября 2010

Я работаю над EF с C # и WPF в качестве внешнего интерфейса. Мне нужно предоставить пользовательский интерфейс, чтобы пользователь мог создать свой собственный запрос и получить результат. Пользовательским интерфейсом будет список таблиц и список столбцов для выбора (не в восторге от пользовательского интерфейса. Нужно улучшить, но у меня в голове новые тики).

Поэтому мой вопрос заключается в том, как создавать, объединять (существующий запрос) и выполнять запросы.

Есть SQL-класс, Entity Client, класс objectquery. Я использовал ObjectQuery

string querystring = @"SELECT PrjDev FROM prjscenario"; 
ObjectQuery<PrjDev> prjdevquery = new ObjectQuery<PrjDev>(querystring, ptxobjcontext);
string cpmmandtext = prjdevquery.CommandText;
int prjdevnum =  prjdevquery.Count();

Это работает. Но когда я запускаю сложный запрос. Это не работает. Пример кода:

string querystring = @"SELECT PrjDev FROM prjscenario WHERE PrjDev.PrjDevType = 10";

Ошибка:

PrjDevType не является членом 'Transient.collection [Skm.Ptx.Data.Emf.PrjDev (Nullable = True, DefaultValue =)]'. Извлечь свойство коллекции элемент, используйте подзапрос для итерации над коллекцией. Почти простой идентификатор, строка 1, столбец 45.

Есть идея, почему она хороша для одного простого запроса, но не работает для сложных запросов?

Заранее спасибо, N

1 Ответ

11 голосов
/ 19 октября 2010

Запрос, переданный в качестве параметра конструктору ObjectQuery<T>, НЕ является запросом SQL, это запрос ESQL (Entity SQL).Хотя они похожи по синтаксису, они очень разные языки.Вы можете узнать больше о ESQL на этой странице .

Если вы хотите выполнить настоящий SQL для базовой базы данных ObjectContext, вы можете использовать метод ObjectContext.ExecuteStoreQuery или просто получить соединение черезObjectContext.Connection и напишите оттуда «классический» код ADO.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...