Stored Procedure return -1 for all cases in entity framework

后端 未结 3 1325
无人共我
无人共我 2020-12-16 12:08
CREATE PROC spIsValidUser
     @UserName varchar(50),
     @Password varchar(50) 
AS
    IF  Exists(SELECT * FROM Users where UserName=@UserName and Password=@Passwo         


        
3条回答
  •  盖世英雄少女心
    2020-12-16 12:30

    Your stored procedure is currently returns a scalar value. Use the following steps to solve this issue:

    • Change your stored procedure like this (Don't use the keyword return in the stored procedure to return the value, Entity Framework cannot support Stored Procedure Return scalar values out of the box. BUT there is a work around):

      ALTER PROC spIsValidUser
      @UserName varchar(50),
      @Password varchar(50) 
      AS
      SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password
      return
      
    • You need to Import the stored procedure as a Function. Right-click on the workspace area of your Entity model and choose Add -> Function Import.

    • In the Add Function Import dialog, enter the name you want your stored procedure to be referred to in your model, choose your procedure from the drop down list, and choose the return value of the procedure to be Scalar.

    • Finally write you code like this:

      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
      

    Edit: I think support of stored procedure return values depends on version of Entity framework. Also Entity Framework doesn't have rich stored procedure support because its an ORM, not a SQL replacement.

提交回复
热议问题