我正在研究学校的项目,我试图在我的存储库类中实现异步方法,并在我的API中获得了这个错误,用于后置方法:参数1:无法从'System.Threading.Tasks.Task‘转换为Project.Models.Booking。
有人能帮我解决这个错误吗?
这就是我的存储库方法的样子:
public async Task<Booking>CreateBooking(Booking inBooking) {
Booking booking = new Booking();
booking.BookingId = ApplicationDbContext.Bookings.Count();
booking.UserName = inBooking.UserName;
booking.UserMail = inBooking.UserMail;
booking.UserMobile = inBooking.UserMobile;
booking.Available = false;
booking.StartTime = inBooking.StartTime;
booking.EndTime = inBooking.EndTime;
booking.Date = inBooking.Date;
Add(booking);
return await Task.FromResult(booking);
//return booking;
}我的邮政方式是这样的:
[Route("api/PostBooking")]
[HttpPost]
public async Task<IHttpActionResult> PostBooking(BookingSystemServiceBookingViewModel inBooking)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid data");
}
var booking = inBooking.booking;
booking.StartTime = inBooking.startTime;
booking.EndTime = inBooking.startTime.AddMinutes(inBooking.service.Duration);
uw.Services.AddBooking(uw.Bookings.CreateBooking(booking), inBooking.service.ServiceId);
uw.Complete();
return Ok();
}我收到的错误消息是: uw.Services.AddBooking(uw.Bookings.CreateBooking(booking),inBooking.service.ServiceId);
发布于 2019-05-09 14:10:17
尝试在存储库类中实现异步方法
使事物异步的最好方法不是从“外部”。也就是说,您不希望从控制器操作开始,并说“如何使此异步?”相反,您希望从最低级别的API开始,并说“这应该是异步的”(即,它是基于I/O的),然后让异步在那里成长。
如果Add实际执行数据库插入,那么这将是第一个异步的方法。然后await您的AddAsync方法,异步从AddAsync增长到CreateBookingAsync。
public async Task<Booking> CreateBookingAsync(Booking inBooking) {
Booking booking = new Booking();
...
await AddAsync(booking);
return booking;
}
[Route("api/PostBooking")]
[HttpPost]
public async Task<IHttpActionResult> PostBooking(BookingSystemServiceBookingViewModel inBooking)
{
...
uw.Services.AddBooking(await uw.Bookings.CreateBookingAsync(booking), inBooking.service.ServiceId);
uw.Complete();
return Ok();
}另一方面,如果实际与数据库通信的是Complete方法,那么这个方法应该是异步的。在本例中,Add纯粹是内存中的操作,而Complete是保存所有数据库更新的操作。因此,在将Complete转换为CompleteAsync之后,代码如下所示:
public Booking CreateBooking(Booking inBooking) {
Booking booking = new Booking();
...
Add(booking);
return booking;
}
[Route("api/PostBooking")]
[HttpPost]
public async Task<IHttpActionResult> PostBooking(BookingSystemServiceBookingViewModel inBooking)
{
...
uw.Services.AddBooking(uw.Bookings.CreateBooking(booking), inBooking.service.ServiceId);
await uw.CompleteAsync();
return Ok();
}https://stackoverflow.com/questions/56058150
复制相似问题