首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数1:无法从'System.Threading.Tasks.Task<Project.Models.Booking>‘转换为Project.Models.Booking

参数1:无法从'System.Threading.Tasks.Task<Project.Models.Booking>‘转换为Project.Models.Booking
EN

Stack Overflow用户
提问于 2019-05-09 11:13:57
回答 1查看 1K关注 0票数 0

我正在研究学校的项目,我试图在我的存储库类中实现异步方法,并在我的API中获得了这个错误,用于后置方法:参数1:无法从'System.Threading.Tasks.Task‘转换为Project.Models.Booking。

有人能帮我解决这个错误吗?

这就是我的存储库方法的样子:

代码语言:javascript
复制
    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;
    }

我的邮政方式是这样的:

代码语言:javascript
复制
 [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);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-09 14:10:17

尝试在存储库类中实现异步方法

使事物异步的最好方法不是从“外部”。也就是说,您不希望从控制器操作开始,并说“如何使此异步?”相反,您希望从最低级别的API开始,并说“这应该是异步的”(即,它是基于I/O的),然后让异步在那里成长。

如果Add实际执行数据库插入,那么这将是第一个异步的方法。然后await您的AddAsync方法,异步从AddAsync增长到CreateBookingAsync

代码语言:javascript
复制
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之后,代码如下所示:

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56058150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档