我正在创建一个新应用程序,该应用程序需要与旧版代码:(。

我尝试调用的存储过程使用RETURN作为结果。我执行和使用返回值的尝试导致异常:



不需要更改存储过程以另一种方式返回值,因为它要么需要更新旧版应用程序,要么需要维护几乎重复的存储过程。

旧式存储过程简介:

DECLARE @MyID INT
INSERT INTO MyTable ...
SELECT @MyID = IDENTITY()
RETURN @MyID

我的 Entity Framework / DbContext工作,产生了上面的InvalidOperationException。
 SqlParameter parm = new SqlParameter() {
    ParameterName = "@MyID",
    Direction = System.Data.ParameterDirection.ReturnValue
 };

 DbContext.Database.ExecuteSqlCommand("EXEC dbo.MyProc", parm);

寻找不需要修改存储过程的所有解决方案。

最佳答案

您可以将存储过程的返回值捕获到输出参数中:

SqlParameter parm = new SqlParameter() {
    ParameterName = "@MyID",
    SqlDbType = SqlDbType.Int,
    Direction = System.Data.ParameterDirection.Output
 };

Database.ExecuteSqlCommand("exec @MyId = dbo.MyProc", parm);

int id = (int)parm.Value;

10-05 21:09
查看更多