[英]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.