Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在实体框架中使用SqlQuery_Sql Server_Entity Framework - Fatal编程技术网

Sql server 在实体框架中使用SqlQuery

Sql server 在实体框架中使用SqlQuery,sql-server,entity-framework,Sql Server,Entity Framework,sql存储过程中sql参数的顺序必须与SqlSquery中使用的sql参数的顺序匹配,这是真的吗 var Parameter = new List<SqlParameter>(); Parameter.Add(new SqlParameter("@ParamOne", 1)); Parameter.Add(new SqlParameter("@ParamTwo", 2)); Parameter.Add(new SqlParameter("@ParamThree", 3));

sql存储过程中sql参数的顺序必须与SqlSquery中使用的sql参数的顺序匹配,这是真的吗

 var Parameter = new List<SqlParameter>();
 Parameter.Add(new SqlParameter("@ParamOne", 1));
 Parameter.Add(new SqlParameter("@ParamTwo", 2));
 Parameter.Add(new SqlParameter("@ParamThree", 3));

context.Database.SqlQuery<myEntityType>("exec sp_Stored_Procedure @ParamOne, @ParamTwo, @ParamThree", Parameter.ToArray()).ToList<myEntityType>();
结果集是否为空


这可能会引发许多问题,我想问的是,在这种情况下,我是否遗漏了一些东西?

这实际上可能是双向的

如果您有疑问:

"exec sp_Stored_Procedure @p0, @p1, @p2"
"exec sp_Stored_Procedure @username, @password"
您的参数数组将按顺序分配

但是,如果您有查询:

"exec sp_Stored_Procedure @p0, @p1, @p2"
"exec sp_Stored_Procedure @username, @password"

使用SqlParameter数组,例如新的SqlParameter(“@password”,userSuppliedPassword),则顺序是不相关的。

我一开始不知道这种情况

类似这样的方法可以解决您的问题:

 var Parameter = new List<SqlParameter>();
 Parameter.Add(new SqlParameter("@p1", 1));
 Parameter.Add(new SqlParameter("@p2", 2));
 Parameter.Add(new SqlParameter("@p3", 3));

context.Database.SqlQuery<myEntityType>("exec sp_Stored_Procedure @ParamOne = @p1, @ParamTwo = @p2, @ParamThree = @p3", Parameter.ToArray()).ToList<myEntityType>();
var参数=新列表();
添加(新的SqlParameter(“@p1”,1));
添加(新的SqlParameter(“@p2”,2));
添加(新的SqlParameter(“@p3”,3));
context.Database.SqlQuery(“exec sp_storage_Procedure@ParamOne=@p1,@paramtow2=@p2,@paramtree=@p3”,Parameter.ToArray()).ToList();

旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀@马克:我同意。我只是将其用作默认存储过程名称。除了param name之外,这两个名称之间没有真正的区别。本文对参数的变化进行了更好的描述:我更改了代码,以便您更好地理解问题。哦,我明白您的建议了。我会用变通方法更新我的答案。