Что вызывает "Неверный синтаксис рядомв EF Code First и SQL 2005? - PullRequest
8 голосов
/ 19 июня 2011

Примеры для метода System.Data.Entity.Database.SqlQuery, которые я обнаружил, хорошо работают с SQL 2008 R2, но не работают с SQL 2005.

Этот вызов будет работать с SQL2008 R2:

var myEntities = dbContext.Database.SqlQuery<MyEntity>("GetDataFromMySp @EntityId = {0}", entityId);

Однако в SQL 2005 этот оператор создает исключение SqlException с сообщением об ошибке «Неверный синтаксис рядом с GetDataFromMySp».

Ответы [ 2 ]

18 голосов
/ 19 июня 2011

Решение, найденное самим @Dan (не удалось опубликовать из-за повторения)

Решение, которое я нашел для этой проблемы, заключалось в простом добавлении ключевого слова "EXEC" в запрос:

var myEntities = dbContext.Database.SqlQuery<MyEntity>("EXEC GetDataFromMySp @EntityId = {0}", entityId);

Это решение устранило проблему с SQL Server 2005 и все еще работало с SQL Server 2008 R2.

4 голосов
/ 19 июня 2011

EXEC требуется только в том случае, если в пакете есть какие-либо операторы перед GetDataFromMySp.Имя хранимой процедуры само по себе должно быть в порядке.

Я бы запустил SQL Profiler, чтобы посмотреть, что в действительности отправляется EF.пакета в дополнение к тексту вашей команды.

См. это: http://social.msdn.microsoft.com/Forums/eu/adonetefx/thread/bae30a3d-7a66-4aff-af99-6426cf0483b5

...