简体   繁体   English

int不包含Getawaiter + asp.net核心Web api异步的定义

[英]int does not contain a definition for Getawaiter + asp.net core web api async

I am trying to implement the async CRUD functionality for my application using asp.net core webapi. 我正在尝试使用asp.net核心webapi为我的应用程序实现异步CRUD功能。 I have been told to only use stored procedures for doing any requests to the database. 有人告诉我只能使用存储过程对数据库进行任何请求。 I have implemented the async for the get request but struggling to the same for create request. 我已经为get请求实现了异步,但是在create请求中却陷入了同样的困境。 Could somebody tell me what am I doing wrong in my code? 有人可以告诉我我的代码在做什么错吗?

I am getting the following error message in my repository method in the await line of code 我在代码的等待行中的存储库方法中收到以下错误消息

在此处输入图片说明

Controller method: 控制器方式:

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

Repository method: 存储库方法:

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

New repository method: 新的存储库方法:

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

Stored procedure: 存储过程:

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 most likely returns an int, not a Task. ExecuteSqlCommand最有可能返回int,而不是Task。 Use ExecuteSqlCommandAsync instead. 请改用ExecuteSqlCommandAsync https://msdn.microsoft.com/en-us/library/system.data.entity.database.executesqlcommandasync(v=vs.113).aspx https://msdn.microsoft.com/zh-CN/library/system.data.entity.database.executesqlcommandasync(v=vs.113).aspx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WebApi .Net Core错误,因为其中不包含GetAwaiter的定义 - WebApi .Net Core error as does not contain definition for GetAwaiter “对象”不包含定义<property>在asp.net核心3.1中 - 'object' does not contain a definition for <property> in asp.net core 3.1 ASP.NET Core:IConfigurationBuilder 不包含 AddAzureKeyVault 的定义 - ASP.NET Core: IConfigurationBuilder Does Not Contain Definition For AddAzureKeyVault 带有 MVC iapplicationbuilder 的 ASP.NET Core 不包含 usemvc 的定义 - ASP.NET Core with MVC iapplicationbuilder does not contain a definition for usemvc ASP.NET Core 3.1“‘用户’不包含‘FindFirstValue’的定义” - ASP.NET Core 3.1 "'User' does not contain a definition for 'FindFirstValue'" ASP.NET Core API 获取错误:&#39;EntityEntry<Vehicle> &#39; 不包含定义 - ASP.NET Core API Get error: 'EntityEntry<Vehicle>' does not contain a definition ASP.NET Core Web API:程序不包含适用于入口点的静态“ Main”方法 - ASP.NET Core Web API: Program does not contain a static 'Main' method suitable for an entry point ASP.Net Core Web Api 中的异步视频流不起作用 - Async video streaming in ASP.Net Core Web Api is not working asp.net 内核中的异步等待 web api(不是 MVC) - async-await in asp.net core web api (not MVC) 如何在ASP.NET Core Web API中传递int数组 - How to pass an array of int in ASP.NET Core Web API
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM