Sql server 使用LINQ使用实体框架执行存储过程

Sql server 使用LINQ使用实体框架执行存储过程,sql-server,linq,entity-framework,stored-procedures,Sql Server,Linq,Entity Framework,Stored Procedures,我越来越 “ABC.Security.GetUserLocation”附近的语法不正确 使用以下代码执行存储过程时 点是名称的一部分(用于分组),不要将其与模式混淆 比如“名字,姓氏”。我可以从SSMS执行它,没有任何问题 var userNameToSearch = new SqlParameter("@userName", userName); userNameToSearch.DbType = System.Data.DbType.String; userNameToSearch.Size

我越来越

“ABC.Security.GetUserLocation”附近的语法不正确

使用以下代码执行存储过程时

点是名称的一部分(用于分组),不要将其与模式混淆

比如“名字,姓氏”。我可以从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;
var userNameToSearch=newsqlparameter(“@userName”,userName);
userNameToSearch.DbType=System.Data.DbType.String;
userNameToSearch.Size=100;
List locations=db.Database.SqlQuery(@“[ABC.Security.GetUserLocation]”,userNameToSearch.ToList();
返回地点;

使用类似于C#code的名称的正确方法是什么?

您可以如下所示在DbContext类中调用存储过程

this.Database.SqlQuery<YourEntityType>("storedProcedureName",params);
this.Database.SqlQuery(“storedProcedureName”,params);
详情如下:


这是这个问题的答案:

尽量明确地使用您的参数

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

“{0}”表示您正在将用户名作为第一个参数传递给搜索,而与参数的名称无关。

请尝试
“EXEC[ABC.Security.GetUserLocation]{0}”
对于SQL 2005版本,第一个参数的可能重复项必须是字符串值(或文字值),而不是SQLParameter at。