如何创建Linq查询以检查数据库中是否存在数据?

问题描述 投票:0回答:1

我遇到的问题是我无法让查询检查数据库中相同属性中是否已经存在相同的文本。以下是控制器的一部分。该查询包含if语句。

[AllowAnonymous]
    [HttpPost]
    public async Task<IActionResult> PostBook(Booking bookings, string Title)
    {
        if(!ModelState.IsValid)
        {
            var SearchData = await _context.bookings.Where(x => x.Title == Title).SingleOrDefaultAsync();
            if (SearchData != null) 
                return BadRequest("bad request");
        }


        _context.bookings.Add(bookings);
         _context.SaveChanges();


        return Ok();
    }

[无论何时输入相同的数据,都会以200个请求或500个内部错误的形式出现。预期结果应该是400错误的请求。当我从邮递员400发出发帖请求时,应该会出现错误的请求。这类似于检查用户名是否已存在。我要实现的是一种餐厅预订系统,该系统不允许用户使用相同的名称或时间?如何使用基于小时的会话和字符串针对Time执行此操作?我想知道你们是否有人在检查数据库中是否存在相同的值或文本之前完成了此操作。

我正在将.net core与vs代码和Postman一起使用以发布JSON数据。

以下是我的预订模型。

    public class Booking
    {
        public int Id { get; set; }

        public string Title { get; set; }

        public DateTime Date { get; set; }

        public string Request { get; set; }

        public int NoPeople { get; set; }

        public Customer Customer { get; set;}

}

enter image description here

asp.net json linq
1个回答
0
投票

问题是,用于检查唯一性的值不同于保存到数据库的值。

删除Title参数,并使用预订实例中的title属性检查唯一性。

[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> PostBook(Booking newBooking)
{
    var titleExists = 
        await _context.bookings.AnyAsync(b => b.Title == newBooking.Title);

    if (titleExists) 
        return BadRequest($"Title '{newBooking.Title}' already exists");
    }

    _context.bookings.Add(newBooking);
    await _context.SaveChangesAsync();

    return Ok();
}

使用AnyAsync功能,您可以检查是否存在,而无需在存在整个记录的情况下加载整个记录。

© www.soinside.com 2019 - 2024. All rights reserved.