Asp.net core int不包含Getawaiter+;asp.net核心web api异步

Asp.net core int不包含Getawaiter+;asp.net核心web api异步,asp.net-core,task,asp.net-core-webapi,Asp.net Core,Task,Asp.net Core Webapi,我正在尝试使用asp.net核心webapi为我的应用程序实现异步CRUD功能。我被告知只使用存储过程对数据库进行任何请求。我已经为get请求实现了异步,但为create请求实现了异步。有人能告诉我我的代码哪里做错了吗 我在等待代码行的存储库方法中收到以下错误消息 控制器方法: [HttpPost] [Route("api/Movies")] public async Task<IActionResult> CreateMovie([FromBody] MoviesDto movi

我正在尝试使用asp.net核心webapi为我的应用程序实现异步CRUD功能。我被告知只使用存储过程对数据库进行任何请求。我已经为get请求实现了异步,但为create请求实现了异步。有人能告诉我我的代码哪里做错了吗

我在等待代码行的存储库方法中收到以下错误消息

控制器方法:

[HttpPost]
[Route("api/Movies")]
public async Task<IActionResult> CreateMovie([FromBody] MoviesDto movies)
{
    if (movies == null)
    {
        return BadRequest();
    }

    // Check if movie exists
    var movie =  _moviesRepository.GetMovie(movies.MovieId);

    if (movie == null)
    {
        return NotFound();
    }

    var results = Mapper.Map<Movies>(movies);

    if (ModelState.IsValid)
    {
        await _moviesRepository.AddMovie(results);
    }

    return Ok(results);
}
新的存储库方法:

public async Task AddMovie(Movies movie)
{
    await _mrdbContext.Database.ExecuteSqlCommand("dbo.spInsertMovie {0}, {1}, {2}, {3}, {4}, {5}", movie.Title,movie.ReleaseYear,movie.Plot,movie.MovieLength,"Ranjit Menon","");
}
public async Task AddMovie(Movies movie)
{
    object[] parameters =
            {
                new SqlParameter("@val1", movie.Title),
                new SqlParameter("@val2", movie.ReleaseYear),
                new SqlParameter("@val3", movie.Plot),
                new SqlParameter("@val4", movie.MovieLength),
                new SqlParameter("@val5", "Ranjit Menon"),

                new SqlParameter
                {
                    ParameterName = "@retVal",
                    SqlDbType = SqlDbType.Int,
                    Direction = ParameterDirection.Output,
                    Value = -1
                }
        };

    await  _mrdbContext.Database.ExecuteSqlCommandAsync("EXEC  @retVal = dbo.spInsertMovie @val1, @val2, @val3, @val4,@val5", CancellationToken.None , parameters);
}
存储过程:

CREATE PROCEDURE [dbo].[spInsertMovie]
    (@Title varchar(50),  
     @ReleaseYear int, 
     @Plot varchar(50), 
     @MovieLength int, 
     @CreatedBy varchar(20)
    )
AS
BEGIN
    set nocount on

    ----------------------------------------
    -- variables
    ----------------------------------------

    -- error
    declare @ErrorMessage nvarchar(2048), @ErrorSeverity int, @ErrorState int, @MovieID int

    ----------------------------------------
    -- insert record
    ----------------------------------------

    begin try


        -- insert record
            insert into [dbo].[Movies]
                       ([Title]
                       ,[ReleaseYear]
                       ,[Plot]
                       ,[MovieLength]                      
                       ,[CreatedBy]                    
                       ,[UpdatedBy])
            values
                       (@Title
                       ,@ReleaseYear
                       ,@Plot
                       ,@MovieLength                     
                       ,@CreatedBy
                       ,@CreatedBy)


        -- get assigned id
        set @MovieID = scope_identity()



    end try
    begin catch
        select @ErrorMessage = dbo.fnGetErrorMessage('Insert Movie Record', error_message(), object_schema_name(@@procid), object_name(@@procid), error_line()), @ErrorSeverity = error_severity(), @ErrorState = error_state();
        raiserror(@ErrorMessage, @ErrorSeverity, @ErrorState);
        return
    end catch

    -- return assigned id
    select @MovieID as MovieID

END

ExecuteSqlCommand
很可能返回int,而不是任务。改用
ExecuteSqlCommandAsync

我刚刚根据您的建议添加了新的存储库方法。但是我没有看到程序被调用。我已打开探查器以捕获呼叫。我已经通过传递相同的参数值在后端测试了我的存储过程,通过返回新生成的电影ID,它可以正常工作storeprocedure@Tom它是否抛出异常或以任何方式失败?嗨,安德鲁,我没有看到异常抛出,这使我很难理解为什么它不工作。