存储过程总是返回-1(asp.net MVC,实体,SQL)

时间:2017-07-13 16:42:28

标签: sql asp.net-mvc entity-framework

我试图从数据库第一个MVC实体框架项目调用SQL Server中的存储过程,但返回值始终返回-1。

我已经尝试了很多不同的方法来解决这个问题,到目前为止还没有成功。我在下面列出了我认为的相关代码。如果需要更多代码,请告诉我。感谢任何可以提供帮助的人!

这只是我的测试代码,看它是否正常工作。

public ActionResult Index()
{
    Cust_Entities cse = new Cust_Entities();

    if (cse.DoesCustomerNumberExist("1") == 1)
    {
        return RedirectToAction("Index", "Home");
    }
    else
    {
        return RedirectToAction("About", "Home");
    }          
}

public virtual int DoesCustomerNumberExist(string customer_Number)
{
    var customer_NumberParameter = customer_Number != null ?
        new ObjectParameter("Customer_Number", customer_Number) :
        new ObjectParameter("Customer_Number", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DoesCustomerNumberExist", customer_NumberParameter);
}

SQL Server存储过程代码:

ALTER PROCEDURE [dbo].[DoesCustomerNumberExist]
      @Customer_Number VARCHAR(20)
AS
BEGIN
      SET NOCOUNT ON;

      DECLARE @Exists INT

      IF EXISTS(SELECT Customer_Number
                        FROM business_Final.dbo.AR_Customer
                        WHERE Customer_Number = @Customer_Number)
      BEGIN
            SET @Exists = '1'
      END
      ELSE
      BEGIN
            SET @Exists = '0'
      END

      RETURN @Exists
END

2 个答案:

答案 0 :(得分:3)

您正在使用ExecuteFunction的无类型版本。根据文件:

  

执行数据中定义的存储过程或函数   来源并在概念模型中表达;丢弃任何结果   从函数返回;并返回受影响的行数   执行。

如果未进行任何修改,则通常为-1。

以下是ExecuteFunction的不同形式的文档:https://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executefunction(v=vs.110).aspx

答案 1 :(得分:2)

非泛型ExecuteFunction的返回值是受影响的行数,而不是存储过程的返回值。换句话说,它只适用于更新,删除等内容,而不是选择。

要返回数据,您必须使用通用版本,即ExecuteFunction<TElement>,其中TElement是您的返回类型。这是因为该方法需要知道如何绑定从SQL Server返回的值。