我有一个EF6实现,我目前正在处理执行存储过程时的序数参数调用。我知道这是由于各种原因改变参数位置时给出的错误。
我有这个帮助方法,可以更容易地调用存储过程。
public static IEnumerable<T> ExecuteSProc<T> (this DbContext ctx , string schema , string intent , string sproc , params SqlParameter[] para)
{
return ctx.Database.SqlQuery<T>("Execute " + schema + "." + intent + "_" + sproc, para).ToArray();
}
当参数本身不移动时,这通常很有效。
以上扩展程序的示例调用:
return this.ExecuteSProc<QueuedJob>( "SCHEMA" , "PREFIX" ,
"SPROC @Parm1, @Parm2" ,
new SqlParameter( "@Parm1" , SqlDbType.Int ) { Value = parm1 } ,
new SqlParameter( "@Parm2" , SqlDbType.VarChar , 200 ) { Value = parm2 } );
等效序数/隐式T-SQL执行:
Execute SCHEMA.PREFIX_SPROC @parm1, @parm2
T-SQL显式执行:
Execute SCHEMA.PREFIX_SPROC @Parm1=@parm1, @Parm2=@parm2
我需要知道的是如何使用参数显式调用存储过程?
当我尝试使用上面的显式形式设置存储过程签名时,行为类似于序数/隐式签名。通过将参数移动到数据库中存储过程的不同位置进行测试。