【问题标题】:How to create a Linq query to check if data exists in the database?如何创建一个 Linq 查询来检查数据库中是否存在数据?
【发布时间】:2020-04-03 23:10:26
【问题描述】:

我遇到的问题是我无法通过查询来检查数据库中的相同属性中是否已经存在相同的文本。 下面是控制器的部分。此查询包含 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 错误请求时,应该会出现一个 Post 请求。这类似于检查用户名是否已经存在。我要实现的是一个不允许用户具有相同姓名或时间的餐厅预订系统?您如何使用基于小时的会话和字符串来为 Time 执行此操作? 我想知道你们中是否有人在检查数据库中是否存在相同的值或文本之前已经这样做了。

我正在使用带有 vs 代码和 Postman 的 .net 核心来发布 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;}

}

【问题讨论】:

  • 当模型状态无效时,您是否只搜索现有预订?如果您发布有效数据,该代码将永远不会受到影响,这可以解释为什么您从未看到 400 Bad Request

标签: asp.net json linq


【解决方案1】:

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

删除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 功能,您可以在不加载整个记录的情况下检查是否存在,以防此类记录存在。

【讨论】:

  • 非常感谢,它确实有效。我已经为此苦苦挣扎了大约两周,但现在它可以工作了,谢谢法比奥。
猜你喜欢
  • 2020-05-11
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多