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