2015-08-03 2 views
1

Я получаюExecute хранимая процедура с использованием Entity Framework с помощью LINQ

Неправильный синтаксис около 'ABC.Security.GetUserLocation'.

при выполнении хранимой процедуры со следующим кодом.

. Точки являются частью имени (для группировки), не путайте его со схемой.

Что-то вроде «FirstName.LastName». Я могу выполнить его из SSMS без каких-либо проблем.

var userNameToSearch = new SqlParameter("@userName", userName); 
userNameToSearch.DbType = System.Data.DbType.String; 
userNameToSearch.Size = 100; 

List<Location> locations = db.Database.SqlQuery<Location>(@"[ABC.Security.GetUserLocation]", userNameToSearch).ToList(); 

return locations; 

Что было бы правильным способом использовать такие имена, как код C#?

+1

Попробуйте '' EXEC [ABC.Security.GetUserLocation] {0} "' – dman2306

+0

возможный дубликат [Как вызвать хранимую процедуру в Entity Framework 6 (код-первый)?] (Http://stackoverflow.com/questions/20901419/how-to-call-stored-procedure-in-entity-framework-6-code-first) – laylarenee

ответ

1

Try быть явно с параметрами

List<Location> locations = db.Database.SqlQuery<Location>(@"exec [ABC.Security.GetUserLocation] {0}", userNameToSearch).ToList(); 

"{0}" означает, что вы передаете userNameToSearch в качестве первого параметра, не имеет значения, что такое параметр nam е.

+0

Первым параметром должно быть строковое значение (или буквальное значение), а не SQLParameter для версии SQL 2005. –

1

Вы можете вызвать хранимую процедуру в своем классе DbContext следующим образом.

this.Database.SqlQuery<YourEntityType>("storedProcedureName",params); 

здесь больше информации: https://msdn.microsoft.com/en-us/data/jj691402.aspx

это был ответ от этого вопроса: here