Stored Procedure return -1 for all cases in entity framework

后端 未结 3 1314
无人共我
无人共我 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<int> 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.

    0 讨论(0)
  • 2020-12-16 12:52

    Have you tried:

    CREATE PROC spIsValidUser
         @UserName varchar(50),
         @Password varchar(50) 
    AS
        IF  Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password)
        BEGIN
            SELECT 0
    
        END
        ELSE
        BEGIN
            SELECT 1
        END
     GO
    
    0 讨论(0)
  • 2020-12-16 12:57

    Have you imported your stored procedures in the EF model correctly? and are you setting correct return type to stored procedures??

    There are 4 possible return type that you can set to your procedures The possible return types are:

    1. none
    2. Scalars
    3. Complex
    4. Entities

    you need to set scalars return type.

    if you dont know how to set the return type, then here is the full tutorial http://www.binaryintellect.net/articles/30738a7c-5176-4333-aa83-98eab8548da5.aspx

    quick example.

    CREATE PROCEDURE CustOrderCount
        @CustomerID nchar(5)
    AS
    BEGIN
        SELECT COUNT(*) FROM ORDERS 
            WHERE CUSTOMERID=@CustomerID;
    END
    
    
    NorthwindEntities db = new NorthwindEntities();
    var count = db.CustOrderCount("ALFKI");
    int ordercount = count.SingleOrDefault().Value;
    

    this will return int order count.

    0 讨论(0)
提交回复
热议问题