Что вызывает "Неправильный синтаксис около <имя хранимой процедуры>" в EF Code First и SQL 2005?
Примеры для метода System.Data.Entity.Database.SqlQuery, который, как я обнаружил, хорошо работают с SQL 2008 R2, но не работают с SQL 2005.
Этот вызов будет работать с SQL 2008 R2:
var myEntities = dbContext.Database.SqlQuery<MyEntity>("GetDataFromMySp @EntityId = {0}", entityId);
Однако в SQL 2005 этот оператор будет вызывать исключение SqlException с сообщением об ошибке "Неправильный синтаксис рядом с" GetDataFromMySp ".
Ответы
Ответ 1
Решение, найденное самим @Dan (не может публиковать из-за rep)
Решение, которое я нашел для этой проблемы, было просто добавить к запросу ключевое слово "EXEC":
var myEntities = dbContext.Database.SqlQuery<MyEntity>("EXEC GetDataFromMySp @EntityId = {0}", entityId);
Это решение устранило проблему с SQL Server 2005 и все еще работало с SQL Server 2008 R2.
Ответ 2
Вам нужна только EXEC, если в пакете есть какие-либо утверждения до "GetDataFromMySp".
Имя хранимой процедуры само по себе должно быть ОК.
Я бы запустил SQL Profiler, чтобы увидеть, что на самом деле отправляется EF.
Такие вещи, как "подготовленные заявления", выдает дополнительные команды как часть пакета в дополнение к вашему текстовому команду.
Смотрите это: http://social.msdn.microsoft.com/Forums/eu/adonetefx/thread/bae30a3d-7a66-4aff-af99-6426cf0483b5