如何在DbContext.Database.SqlQuery(Sp,Param)中使用CancellationTokenSource?
我正在使用EF6.2并运行带有返回类型的存储过程。
var task = Db.Database.SqlQuery<ResultType>(sp, params).ToListAsync();
foreach(var result in task.Result)
{
var row = result;
}
我们目前的解决方案有取消令牌,但不会返回任何内容:
var task = Db.Database.ExecuteSqlCommandAsync(sp, tokenSource.Token, param);
SqlQuery只有一个方法签名,我无法在documentation
中看到有关取消的任何内容如何使用第一种方法并包含取消令牌? 编辑:或者我应该使用另一种方法吗?
其他信息:我们当前的解决方案ExecuteSqlCommandAsync()返回一个只有“已完成”的int状态作为返回类型的任务。我正在调用的存储过程只是一个INSERT ...但我需要将它更改为SELECT,这样我们就可以生成带有结果的文件。
所以我需要一个EF方法来返回类型为“ResultType”的任务,这样我就可以通过它们来生成我们的文件。
SqlQuery&lt;&gt;()执行此操作...但无法添加取消令牌(无论如何都是这样,因此问题)
答案 0 :(得分:1)
您必须将令牌传递给.ToListAsync()
。只有在调用.ToListAsync(cancellationToken)
时,才会实现查询并将其发送到服务器。
但请注意,传递CancellationToken的选项可能没有您希望看到的效果,请参阅this Q&A / TL; DR:查询仍将在sql server数据库级别运行完成。