是否可以使用实体框架执行存储过程,传入变量并返回数据以及返回值?
请不要在实体框架中留下任何有关功能映射的代码。
我试过这个并且我一直得到同样的错误:
过程或函数'usp_BusinessUser_Search'需要参数 '@TotalRecords',未提供。
这是我的代码:
SqlParameter Business = new SqlParameter("Business", Search.Term);
SqlParameter Location = new SqlParameter("Location", Search.Location);
SqlParameter PageNumber = new SqlParameter("PageNumber", Search.CurrentPage);
SqlParameter RecordsPerPage = new SqlParameter("RecordsPerPage", Search.RecordsPerPage);
SqlParameter TotalRecords = new SqlParameter("TotalRecords", 0);
SqlParameter parm = new SqlParameter()
{
ParameterName = "@TotalRecords",
Value = 0,
SqlDbType = SqlDbType.Int,
Direction = System.Data.ParameterDirection.Output
};
var List = db.ExecuteStoreQuery<ENT_SearchBusinessResult>("exec usp_BusinessUser_Search",Business,Location,PageNumber,RecordsPerPage,parm);
有没有人知道造成这种情况的原因是什么?
由于
编辑:
存储过程代码:
ALTER PROCEDURE [dbo].[usp_BusinessUser_Search] ( @Business nVarChar(255) = NULL
, @Location nVarChar(255) = NULL
, @PageNumber Int = 1
, @RecordsPerPage Int = 10
, @TotalRecords Int OUTPUT)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX)
, @CacheTable SYSNAME
, @TotalRows Int
, @Category VarChar(255)
, @BusinessCategory Int
, @TownCounty VarChar(50)
, @PcodeTownCounty VarChar(50)
INSERT Voucher_SearchHistory (Keyword, Location)
SELECT NULLIF(@Business,''), NULLIF(@Location,'')
答案 0 :(得分:3)
答案 1 :(得分:2)
您没有在执行中传递Total Records Sql参数
var List = db.ExecuteStoreQuery<ENT_SearchBusinessResult>(
"exec usp_BusinessUser_Search",Business,
Location,PageNumber,RecordsPerPage,parm);
答案 2 :(得分:1)
您现在可以使用以下扩展方法ExecuteSqlCommandWithReturn
来处理所有工作!
https://gist.github.com/copernicus365/7037320
string sql = "EXEC sp_CoolProc @SomeParam, @AnotherParam";
int returnValue;
int val = db.ExecuteSqlCommandWithReturn(sql, out returnValue, someParam, anotherParam);
解决方案的关键是由Jieyang Hu here,这是(虽然注意以下所有内容都完全由前面提到的扩展方法处理):正如你在SQL提示符中所做的那样,你只需将执行过程的结果设置为SQL变量(在这种情况下,作为参数发送),如下所示:
EXEC @ReturnVal = sp_MyCoolProc;
此代码在找到的第一个@ReturnVal =
(后跟空格)之后添加片段EXEC
,并添加到SqlParameter
s(或创建SqlParamter
s没有)一个ReturnVal参数,虽然调用者永远不会看到这些。
答案 3 :(得分:0)
参数名称不应包含@
:
SqlParameter parm = new SqlParameter()
{
ParameterName = "TotalRecords",
Value = 0,
SqlDbType = SqlDbType.Int,
Direction = System.Data.ParameterDirection.Output
};
答案 4 :(得分:0)
如果您刚刚添加了该参数('@TotalRecords) 我猜你只需要在edmx模型中更新函数导入定义。