You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 8中用Entity Framework Core 8检查记录是否存在?

正确的数据库记录存在性检查方式

你当前的代码存在严重问题——使用First()方法时,如果数据库中没有匹配optionVisibleBusinessId的记录,EF Core会直接抛出InvalidOperationException,而不是返回null,所以你写的if (businessTypeHiddenOption != null)判断永远不会触发,完全起不到预期的存在性检查作用。

以下是几种正确的实现方式:

  • 方式1:使用Any()(推荐)
    Any()是最适合存在性检查的方法,它会生成高效的SQL查询(仅检查是否存在匹配记录,不会返回整条数据),性能最优。

    private bool IsItemExist(Guid optionVisibleBusinessId)
    {
        return _db.BusinessTypeHiddenOptions.Any(x => x.OptionVisibleBusinessId == optionVisibleBusinessId);
    }
    
  • 方式2:使用FirstOrDefault()
    如果你后续需要用到该记录的其他数据,可以用FirstOrDefault(),它在找不到记录时会返回null,不会抛出异常:

    private bool IsItemExist(Guid optionVisibleBusinessId)
    {
        var businessTypeHiddenOption = _db.BusinessTypeHiddenOptions.FirstOrDefault(x => x.OptionVisibleBusinessId == optionVisibleBusinessId);
        return businessTypeHiddenOption != null;
    }
    

    注意:这种方式会查询并返回整条匹配的记录,相比Any()性能稍差,如果只是单纯检查存在性,优先用Any()。

  • 方式3:使用Find()(针对主键查询)
    如果OptionVisibleBusinessId是BusinessTypeHiddenOption实体的主键,可以用Find(),EF Core会先检查本地缓存,再查询数据库:

    private bool IsItemExist(Guid optionVisibleBusinessId)
    {
        var businessTypeHiddenOption = _db.BusinessTypeHiddenOptions.Find(optionVisibleBusinessId);
        return businessTypeHiddenOption != null;
    }
    

内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:42:41