【问题标题】:Create async stored procedure call in Entity Framework在实体框架中创建异步存储过程调用
【发布时间】:2020-01-14 07:23:34
【问题描述】:

我已将存储过程导入到我的 EF6 数据模型中。现在我想异步调用它,但似乎 EF 没有创建 SP 的 Async 版本。我错过了什么吗?

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

【问题讨论】:

  • 没有。只是数据库优先 (EDMX) 在 async-await 尚不存在且以后从未添加该选项时已成为过时的技术。
  • 我从未尝试过,但等待 Task.Run(() => db.CallMyProcedure(param));你的目标还不够吗?
  • @Miite: await Task.Run 将在后台线程上调用相同的同步CallMyProcedure,这与调用异步方法不同。不过,您可以使用它从调用线程中卸载阻塞工作。
  • @GertArnold 这是我公司现在使用的技术,所以我真的别无选择。我们当前的工作流程是先创建一个 Visual Studio 数据库项目,放下所有的表、视图和存储过程,将其发布到我们的数据库服务器,然后从中创建一个模型。
  • @mm8 使用此 SPC 的方法只是一个 SignalR 包装器。我不认为在它周围加上Task.Run 会使它变得更好。

标签: c# sql-server entity-framework async-await


【解决方案1】:

我通过将自己的方法添加到(幸运的)partial 模型类中解决了这个问题:

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)
            );
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多