【问题标题】:Entity Framework - grab stored procedure result实体框架 - 抓取存储过程结果
【发布时间】:2016-10-28 04:51:04
【问题描述】:

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

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。

我错过了什么吗?

提前致谢。

【问题讨论】:

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


    【解决方案1】:
    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

    例如,您可以在 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
                        } 
        }
    

    【讨论】:

    • 宾果游戏@Alexcei Shmakov。谢谢。
    • 嗨,我们如何取回多列?就像存储过程的最后一行是'SELECT @Field1,@Field2'?我是否必须创建一个具有两个名为“Field1”和“Field2”的字段的类?我试过这样做,但没有工作。
    • 按照您的建议修改 SP 后,它起作用了!但是,不幸的是,我无法修改已被多个客户使用的 SP,因此需要找到其他一些解决方法。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多