LINQ to SQL вызывает хранимую процедуру, которая использует динамический SQL - PullRequest
0 голосов
/ 02 сентября 2011

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

Я хочу подключиться к хранимой процедуре с динамическим SQL.

В конце хранимой процедуры есть оператор exec.

exec(@srchQuery) 

Когда я это делаю, это не работает, потому что это динамический SQL.

Если я использую print @srchQuery и копирую эту хранимую процедуру и использую этот статический SQL в хранимой процедуре, это работает без проблем.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

LINQ to SQL анализирует прямые операторы SELECT, чтобы увидеть, какой тип модели он должен проецировать в результате выполнения указанной хранимой процедуры SQL.Поскольку вы используете динамический оператор, использующий EXEC, он не может определить, какой тип модели генерировать.

Простой ответ - либо не использовать хранимую процедуру, а вместо этого использовать LINQ to SQL для генерацииSQL, или не используйте динамический встроенный оператор в вашей хранимой процедуре.

Тот факт, что вы генерируете оператор SQL, должен означать, что у вас есть строгий вариант его использования, поскольку он может достичь того, чего вы хотите безхранимая процедура.Всегда отдавайте предпочтение простоте ... спросите себя, нужно ли вам использовать динамически построенный оператор в хранимой процедуре?

0 голосов
/ 02 сентября 2011

Просто вызовите хранимую процедуру непосредственно в DataContext:

using (YourDataContext dc = new YourDataContext())
{
    ...
    dc.ExecuteCommand("EXEC MyStoredProcedure");
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...