首页 > 解决方案 > EF 6 - 使用存储过程并调用 ToListAsync()

问题描述

我正在尝试通过 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;
       }

标签: c#.netentity-framework

解决方案


我想通了。我没有正确使用该方法。我正在使用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;
    }

推荐阅读