如何进行EF Database.ExecuteSQLCommand异步?

时间:2014-10-18 04:26:27

标签: asp.net sql-server entity-framework asp.net-web-api entity-framework-6

这是我正在使用的代码:

    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 个答案:

答案 0 :(得分:7)

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

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

您可以按以下方式重写代码:

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

您是否检查过哪里可以找到问题的原因? Windows错误日志等?

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