【问题标题】:EF 6 - Consume stored procedure and call ToListAsync()EF 6 - 使用存储过程并调用 ToListAsync()
【发布时间】:2020-05-31 23:10:32
【问题描述】:

我正在尝试通过 EF 6 调用存储过程。使用 ToList() 按预期工作并返回实体列表。但是, ToListAsync() 似乎没有返回数据。在 sql Profiler 中,我可以看到正在对数据库执行的存储过程。但是,没有命中 ToListAsync() 行之后的断点。我从来没有看到数据被返回。

代码如下

public async Task<List<MyEntityObject>> GetStoredProcedureData()        {

           List<MyEntityObject> MyEntityObjects;
           using (var dbContext = new DbContext())
           {
               var  MyEntityObjectsQry = dbContext.Database.SqlQuery<MyEntityObject>("dbo.GetStoredProcedureData");
               MyEntityObjects =await MyEntityObjectsQry.ToListAsync();              
           }
           return MyEntityObjects;
       }

【问题讨论】:

  • 请分享minimal reproducible example,包括GetStoredProcedureData存储过程的源代码以及GetStoredProcedureData函数的调用方式。

标签: c# .net entity-framework


【解决方案1】:

我想通了。我没有正确使用该方法。我正在使用Windows服务。另外,我无法将异步添加到 Main 方法。

static void Main(string[] args)
     {    
         // async cannot be added to Main    
         // await  CallStoredProcedure(); will not work here
         Task<bool> task = Task.Run<bool>(async () => await CallStoredProcedure());
         var test = task.Result;
     }

static async Task<bool> CallStoredProcedure()
    {
        var dataService = new MyDataService();
        // just call my method with await
        var details = await dataService.GetStoredProcedureData();
        Console.WriteLine("found {0} items", details.Count);
        return true;
    }

【讨论】:

    【解决方案2】:

    get 方法会是这样的

    var myEntityObjectsQry = await dbContext.Database.ToListAsync();
    

    更多参考: https://www.entityframeworktutorial.net/entityframework6/async-query-and-save.aspx

    【讨论】:

      猜你喜欢
      • 2019-12-08
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2023-02-11
      相关资源
      最近更新 更多