CREATE PROC spIsValidUser @UserName varchar(50), @Password varchar(50) AS IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password) BEGIN return 0 END ELSE BEGIN return 1 END GO
我已经创建了这个Stored Procedure并且尝试Stored Procedure使用实体框架来调用它。下面是用C#编写的代码。
Stored Procedure
MyBusEntities db = new MyBusEntities(); int empQuery = db.spIsValidUser("abc", "abc@123");
spIsValidUser Stored Procedure``-1在所有情况下都返回。请让我知道错误。
spIsValidUser
Stored Procedure``-1
编辑 -根据给定的答案,不使用存储过程的return语句,因为Entity Framework不支持开箱即用的存储过程返回标量值。让我知道如何从中发送标量数据Stored Procedure?
您的存储过程当前返回 标 量值。使用以下步骤来解决此问题:
像这样更改您的存储过程(不要return在存储过程中使用关键字返回值,Entity Framework无法支持存储过程立即返回 标 量值。但是可以解决):
return
ALTER PROC spIsValidUser
@UserName varchar(50), @Password varchar(50) AS SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password return
您需要将存储过程导入为Function。右键单击实体模型的工作区,然后选择Add -> Function Import。
Function
Add -> Function Import
在Add Function Import对话框中,输入要在模型中引用存储过程的名称,从下拉列表中选择过程,然后将过程的返回值选择为 Scalar 。
Add Function Import
最后,像这样编写代码:
MyBusEntities db = new MyBusEntities();
System.Nullable empQuery = db.spIsValidUser(“abc”, “abc@123”).SingleOrDefault().Value; MessageBox.Show(empQuery.ToString());// show 1 if Exist and 0 if not Exist
编辑: 我认为对存储过程返回值的支持取决于Entity Framework的版本。另外,Entity Framework不具有丰富的存储过程支持,因为它是ORM而不是SQL的替代品。