C# 参数1:无法从';System.Threading.Tasks.Task<;项目.模型.预订>';预订
我正在学校项目中工作,我正在尝试在我的存储库类中实现异步方法,并且在我的API中针对POST方法得到以下错误:参数1:无法从“System.Threading.Tasks.Task”转换为project.Models.Booking 有人能帮我解决这个错误吗 我的存储库方法是这样的:C# 参数1:无法从';System.Threading.Tasks.Task<;项目.模型.预订>';预订,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,我正在学校项目中工作,我正在尝试在我的存储库类中实现异步方法,并且在我的API中针对POST方法得到以下错误:参数1:无法从“System.Threading.Tasks.Task”转换为project.Models.Booking 有人能帮我解决这个错误吗 我的存储库方法是这样的: public async Task<Booking>CreateBooking(Booking inBooking) { Booking booking = new Bookin
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();
}
public async TaskCreateBooking(预订内预订){
预订=新预订();
booking.BookingId=ApplicationDbContext.Bookings.Count();
booking.UserName=inBooking.UserName;
booking.UserMail=inBooking.UserMail;
booking.UserMobile=inBooking.UserMobile;
预订。可用=错误;
booking.StartTime=inBooking.StartTime;
booking.EndTime=inBooking.EndTime;
booking.Date=in booking.Date;
添加(预订);
返回等待任务。FromResult(预订);
//回程订票;
}
我的Post方法是这样的:
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();
}
[路线(“api/预订后”)]
[HttpPost]
公共异步任务PostBooking(BookingSystems服务BookingViewModel inBooking)
{
如果(!ModelState.IsValid)
{
返回请求(“无效数据”);
}
var记账=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();
返回Ok();
}
我在以下位置收到错误消息:uw.Services.AddBooking(uw.Bookings.CreateBooking(booking),inBooking.service.ServiceId)`
尝试在我的存储库类中实现异步方法
使事情异步化的最好方法不是从“外到内”。也就是说,您不希望在控制器操作开始时说“如何使其异步?”。相反,您希望从最低级别的API开始,并说“这应该是异步的”(即,它是基于i/O的),然后让异步从那里发展起来
如果Add
确实插入了数据库,那么这将是第一个异步的方法。然后您等待AddAsync
方法,异步性从AddAsync
增长到createbookingsync
:
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();
}
要返回
任务
方法的结果,您需要等待
或结果
uw.Services.AddBooking(等待uw.Bookings.CreateBooking(booking)、inBooking.service.ServiceId)这也是我遵循在方法名称末尾添加后缀Async的建议的原因之一……)通常的建议是在异步函数的名称后面附加“Async”。如果您这样做,您就不太可能像在这里那样忘记“等待”他们。从返回等待任务中删除“等待”。从结果(预订)
,也是来自公共异步任务CreateBooking(Booking inBooking)
的“异步”,您应该很好。