【发布时间】:2020-04-17 14:10:49
【问题描述】:
我正在接管某人的代码并遇到了这个实体框架查询,但我从未见过它以这种方式完成。每次调用 .FirstOrDefault 时不是都有数据库查询吗?那么在这种情况下,会有 4 个数据库查询,这意味着 5 个打开/关闭到数据库的连接?只是想了解这是否是一种无效的方法,在我看来是这样。
var record = from e in ctx.bio_employee.Where(x => x.emp_id == emp_id)
select new
{
ta.ta_system
,ta.bio_consent_flag
,e.bio_consentform_rid
};
if (record.FirstOrDefault() != null)
{
vm.TASystem = record.FirstOrDefault().ta_system;
vm.bio_consent_flag = record.FirstOrDefault().bio_consent_flag == null ? "N" : record.FirstOrDefault().bio_consent_flag.Trim().ToUpper();
vm.employee_bio_consentform_rid = record.FirstOrDefault().bio_consentform_rid;
}
【问题讨论】:
-
经过一番研究,我推测这确实会对数据库产生 4 个查询。
-
这显然是不好的做法。避免重复 FirstOrDefault 有几个原因: 1. 当局部变量可能减少到 1 次时,该方法几乎肯定会被调用多次。 2. 数据库记录可能会在调用之间发生变化,这意味着结果可能由于删除、插入甚至物理重新排序(查询中未指定排序)而发生变化,因此后续指令可以处理不同的记录。 3.代码清晰和维护,顺便说一句,FirstOrDefault出现5次。在所有指令期间都会保留与数据库的连接。
标签: c# entity-framework linq