如何执行 EF Database.ExecuteSQLCommand 异步?

Posted

技术标签:

【中文标题】如何执行 EF Database.ExecuteSQLCommand 异步?【英文标题】:How do I do an EF Database.ExecuteSQLCommand async? 【发布时间】:2014-12-13 16:52:48 【问题描述】:

这是我正在使用的代码:

    public async Task<IHttpActionResult> NewTopicTests([FromBody] NewTopicTestsDTO testSpec)
    
        var sql = @"dbo.sp_new_topic_tests @Chunk";
        SqlParameter[] parameters = new SqlParameter[]
                    
                        new SqlParameter("@Chunk", testSpec.Chunk)
                    ;
        int result = db.Database.ExecuteSqlCommand(sql, parameters);
        await db.SaveChangesAsync();
        return Ok();
    

有人可以确认这是否是使用异步执行此操作的正确方法吗?我特别需要这样做:

        int result = db.Database.ExecuteSqlCommand(sql, parameters);
        await db.SaveChangesAsync();

请注意,代码可以正常工作,但是我的应用程序出现问题,它突然停止而没有任何错误消息。我正在研究每一个可能的问题。

【问题讨论】:

【参考方案1】:

这里保存了什么?我认为这里没有必要调用保存更改。

删除保存更改,您将看到相同的行为,因为您在存储过程中所做的任何更改都不会被实体框架上下文跟踪。

你可以重写你的代码如下:

int result = await db.Database.ExecuteSqlCommandAsync(sql, parameters);

您是否检查了每个地方以找到问题的原因? Windows 错误日志等?

转到 Visual Studio IDE 的 Debug 菜单,打开 Exceptions,然后检查 'throw' 和 'user_unhandled' 是否有 'Common Language Runtime Exceptions' 并再次测试您的代码。

【讨论】:

感谢您对 VS 检查内容的建议

以上是关于如何执行 EF Database.ExecuteSQLCommand 异步?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ef 对迁移构建强制执行 Restrict DeleteBehavior?

如何使用 EF Core 5 执行存储过程 ORACLE?

如何通过一个数据库往返执行两个 EF linq 查询

ef6 code first,对已有数据库如何执行迁移

MySQL via EF6 的试用报告

如何在 EF Core 3.1 中使用脚手架流程更新我的实体 - 执行超时已过期