【发布时间】:2023-02-07 05:18:51
【问题描述】:
我有一个函数需要验证单独数据库表中某些记录的存在。目前我使用单独的查询来执行此操作,以便我可以返回相关的错误消息。下面是一个人为的例子:
var a = await context.EntityA.FirstOrDefaultAsync(e => e.id == entityAId);
var b = await context.EntityB.FirstOrDefaultAsync(e => e.id == entityBId);
var c = await context.EntityC.FirstOrDefaultAsync(e => e.id == entityCId);
if (a == default) return "Entity A ID is invalid";
if (b == default) return "Entity B ID is invalid";
if (c == default) return "Entity C ID is invalid";
对于三个单独的调用,这感觉效率很低。有没有一种方法可以组合这些调用并且仍然知道哪些(如果有的话)检查失败以便可以形成适当的响应?
【问题讨论】:
-
答案是否定的,除非您使用提供“未来查询”的第三方库。但是有单独的调用真的没什么大不了的(有连接池)。如果您实际上不需要实体对象,您最好联系我们
Any()。 -
+1 使用
Any()。使用FirstOrDefault()会产生加载整个实体的成本,只是为了确定是否有一行。Any()将组成一个查询,该查询仅返回一行是否存在。对于诸如通过 PK/Indexed 值进行的存在检查之类的事情,我也不会为async调用的开销而烦恼,只需使用同步调用即可。async对于在等待重要操作时保持服务器响应很有用,但是如果按顺序运行查询会更快,它会增加开销成本。
标签: .net entity-framework