实体框架 - 获取存储过程结果

时间:2016-10-28 04:51:05

标签: .net stored-procedures entity-framework-6

我有一个存储过程,如下所示:

ALTER PROCEDURE [dbo].[myProc]
    @sampleParam1 VARCHAR (10)
AS     
    DECLARE @AccountID INT      

    --some business logic that evaluates value of @AccountID    
    SELECT @AccountID --I want to grab this value in .Net application.

我正在使用.Net执行此存储过程,如下所示:

class MyResult
{
    public int AccountID { get; set; }
}

public void myfun()
{
      myEntitesEntites = new MyEntites();//Using EF6

      var result = myEntitesEntites.Database.SqlQuery<MyResult>
     ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
}

我期望result.AccountID将保留存储过程中的最后SELECT @AccountID语句的值。但result.AccountID始终为0。

注意:当我从SSMS执行相同的存储过程时,我可以看到@AccountID的实际值不是0。

我错过了什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

  1. 更改存储过程

    CREATE PROCEDURE [dbo].[myProc]
        @sampleParam1 VARCHAR (10)
    AS     
       DECLARE @AccountID INT  =    @sampleParam1
       --some business logic that evaluates value of @AccountID    
       SELECT @AccountID as AccountID --I want to grab this value in .Net application.
    
    public void myfun()
    {
         myEntitesEntites = new MyEntites();//Using EF6
    
         var result = myEntitesEntites.Database.SqlQuery<MyResult>
     ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
    }
    

    结果存储过程中的列名必须与名称相同,而不是来自对象的属性。

  2. 您的程序[dbo].[myProc]会返回int

  3. 例如,您可以在int上更改返回参数的类型。在这种情况下,方法SqlQuery将从存储过程中返回变量@AccountID的正确值。

        public MyResult myfun()
        {
             myEntitesEntites = new MyEntites();//Using EF6
    
             int accountID =  myEntitesEntites.Database.SqlQuery<int>
         ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
             return new MyResult()
                        {
                           AccountID = accountID
                        } 
        }