C# 在实体框架中创建异步存储过程调用

C# 在实体框架中创建异步存储过程调用,c#,sql-server,entity-framework,async-await,C#,Sql Server,Entity Framework,Async Await,我已将一个存储过程导入EF6数据模型。现在我想异步调用它,但似乎EF并没有创建SP的异步版本。我在这里遗漏了什么吗 db.CallMyProcedure(param); // vs await db.CallMyProcedureAsync(param); 我通过向部分模型类添加自己的方法解决了这个问题: using System.Data.SqlClient; using System.Threading.Tasks; namespace My.Softwares.Namespace.Mo

我已将一个存储过程导入EF6数据模型。现在我想异步调用它,但似乎EF并没有创建SP的异步版本。我在这里遗漏了什么吗

db.CallMyProcedure(param);
// vs
await db.CallMyProcedureAsync(param);

我通过向部分模型类添加自己的方法解决了这个问题:

using System.Data.SqlClient;
using System.Threading.Tasks;

namespace My.Softwares.Namespace.Model {
    public partial class DatabaseEntities {
        public virtual Task<int> CancelCurrentForkliftDeliveryAsync(int? iD_Carrier) {
            return Database.ExecuteSqlCommandAsync(
                "exec dbo.CancelCurrentForkliftDelivery @ID_Carrier",
                new SqlParameter("@ID_Carrier", iD_Carrier)
            );
        }
    }
}

不是。只是database first EDMX是过时的技术,因为async await还不存在,而且该选项以后从未添加。我从未尝试过它,但await Task.Run=>db.CallMyProcedureparam;对于您的目标来说还不够?@Miite:await Task.Run将在后台线程上调用相同的同步CallMyProcedure,这与调用异步方法不同。你可以用它来减轻调用线程的阻塞工作。@GertArnold这是我公司现在使用的技术,所以我真的没有选择的余地。我们当前的工作流程是首先创建一个Visual Studio数据库项目,放下所有表、视图和存储过程,将其发布到我们的DB服务器,然后从中创建一个模型。@mm8使用此SPC的方法只是一个信号器包装器。我不认为把一个任务放在一边,绕着它跑会让它变得更好。