参数 1:无法从 'System.Threading.Tasks.Task<Project.Models.Booking>' 转换为 Project.Models.Booking
Argument 1: cannot convert from 'System.Threading.Tasks.Task<Project.Models.Booking>' to Project.Models.Booking
我正在做学校项目,我正在尝试在我的存储库 类 中实现异步方法,但在我的 API 中遇到了 POST 方法的错误: 参数 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;
}
这就是我的 Post 方法的样子:
[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);`
trying to implement asynchronous methods in my repository classes
使事物异步的最好方法不是来自 "outside in"。也就是说,您不想从控制器操作开始并说 "how can I make this asynchronous?"。相反,您想从 lowest-level API 开始并说 "this should be asynchronous"(即 I/O-based),并让异步从那里发展出来。
如果 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
纯粹是一个 in-memory 操作,而 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();
}
我正在做学校项目,我正在尝试在我的存储库 类 中实现异步方法,但在我的 API 中遇到了 POST 方法的错误: 参数 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;
}
这就是我的 Post 方法的样子:
[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);`
trying to implement asynchronous methods in my repository classes
使事物异步的最好方法不是来自 "outside in"。也就是说,您不想从控制器操作开始并说 "how can I make this asynchronous?"。相反,您想从 lowest-level API 开始并说 "this should be asynchronous"(即 I/O-based),并让异步从那里发展出来。
如果 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
纯粹是一个 in-memory 操作,而 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();
}