如何在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ỹ
相关产品推荐
相关产品推荐

