在EntityFramework C#中从数据库更新模型时,存储过程返回一个int

时间:2015-01-08 17:51:28

标签: c# sql-server entity-framework stored-procedures

我正在尝试在我的Web方法中返回一个List

我的存储过程" GetProductsByProductID"使用EXEC sp_name @parameter

从SQL Server执行时返回两个颜色

但是当我在C#Context中更新数据库模型时,我得到int作为返回。

我尝试过,删除SP并重新创建,然后再更新模型。似乎不起作用。如果有人能解决这个问题会非常有用吗?

我的SP代码:

CREATE PROCEDURE [dbo].[GetProductNameIDsByProdNumber] (@prodList nvarchar(max))
AS
BEGIN
  SET NOCOUNT ON
  DECLARE @Err int

  CREATE TABLE #tempProduct (
    ProductNumber int
  )
  INSERT INTO #tempProduct (ProductNumber)
    SELECT
      *
    FROM SplitString(@prodList, ',')

  SELECT
    c.ProductID,
    c.ProductName
  FROM dbo.Product AS c
  INNER JOIN #tempProduct
    ON c.ProductNumber = #tempProduct.ProductNumber

  DROP TABLE #tempProduct

  SET @Err = @@Error
  RETURN @Err
END

GO

我做的结果     EXECUTE GetProductNameIDsByProdNumber @prodList =' 1111,4545'

    ProductID     ProductName
    F6F1067B       ABC
    BD3B2D0A       XYZ

模型生成的SP,当我在上下文文件中从数据库更新模型

public virtual int GetProductNameIDsByProdNumber(string prodList)
        {
            var prodListParameter = prodList != null ?
                new ObjectParameter("prodList", prodList) :
                new ObjectParameter("prodList", typeof(string));

            return ((IObjectContextAdapter)this).
               ObjectContext.ExecuteFunction("GetProductNameIDsByProdNumber", prodListParameter);
        }

1 个答案:

答案 0 :(得分:0)

在你的程序中尝试这样的事情

    CREATE PROCEDURE [dbo].[GetProductNameIDsByProdNumber] (@prodList nvarchar(max))
    AS
    BEGIN
      SET NOCOUNT ON
      DECLARE @Err int

      CREATE TABLE #tempProduct (
        ProductNumber int
      )
      INSERT INTO #tempProduct (ProductNumber)
        SELECT
          *
        FROM SplitString(@prodList, ',')
        BEGIN TRY
             SELECT
            c.ProductID,
            c.ProductName
          FROM dbo.Product AS c
          INNER JOIN #tempProduct
            ON c.ProductNumber = #tempProduct.ProductNumber
        END TRY
        BEGIN CATCH
           SET @Err = @@Error
          RETURN @Err
        END CATCH
END

GO