![](/img/trans.png)
[英]Cannot implicitly convert type 'bool' to 'System.Threading.Tasks.Task'
[英]Argument 1: cannot convert from 'System.Threading.Tasks.Task<Project.Models.Booking>' to Project.Models.Booking
我正在学校项目上工作,并且试图在存储库类中实现异步方法,并且在POST方法的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);`
尝试在我的存储库类中实现异步方法
使事物异步的最佳方法不是“从外而内”。 也就是说,您不想从控制器动作开始就说“如何使它异步?”。 相反,您想从最低级别的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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.