实体框架——使用前检查单条记录的正确方法要获取记录列表,我通常会这样做:varefCompany=fromain_dbRiv.Companywherea.CompanyId==companyFeedInfo.CompanyIdselecta;要获取单个记录,当我知道我正在使用PK检索它时,我使用以下内容:varefCompany=(fromain_dbRiv.Companywherea.CompanyId==companyFeedInfo.CompanyIdselecta).First();现在,使用单记录方法,如果PK是错误值(就像它故意在测试中那样),第二行会抛出错误。获取单个记录并处理它的最佳实践方法是什么?如果您期望0或1,则使用SingleOrDefault;如果您只想要第一条记录,但可以处理0,则使用SingleOrDefault。如果没有结果,两者都将返回该类型的默认值(通常为null)。顺便说一句,这样的查询通常在不使用查询表达式的情况下更具可读性(IMO),因此您可能会遇到类似以下内容:varefCompany=_dbRiv.Company.Where(a=>a.CompanyId==companyFeedInfo.CompanyId).SingleOrDefault();if(efCompany!=null){//使用它}else{//向用户报告,或其他什么}当您使用多个运算符或做相对复杂的事情(如连接)时,查询表达式很棒-但这种“点符号”甚至如果你只是得到where子句或只是预测,那就更简单了。当您需要在最后调用FirstOrDefault之类的方法时,它也会更好。请注意,SingleOrDefault()和FirstOrDefault()都不允许您指定默认值。有DefaultIfEmpty(),它允许您指定在枚举中没有项目时返回的默认值。您可以将此与First()结合使用(如DefaultIfEmpty().First()中所示)以实现FirstOrDefault()的行为,并使用lambda创建新实例并将其添加到集合中。如果您只需要检查记录是否存在,也可以使用Any()。但是,如果您需要处理记录(如果它存在),这将导致两次查询。varefCompany=_dbRiv.Company.SingleOrDefault(a=>a.CompanyId==companyFeedInfo.CompanyId);if(efCompany!=null){//使用它}else{//向用户报告,或其他什么}如果您要查找没有其包含模型的记录,您也可以使用_dbRiv.Company.find(#id)。或_dbRiv.Company.FirstOrDefault(x=>x.Id==#id);出于性能原因,我推荐FirstOrDefault而不是SingleOrDefault。使用SingleOrDefault时,它需要扫描整个表并确保只有一条记录具有Id。使用FirstOrDefault它会一直工作,直到找到id然后停止。在大型表上,每个查询都会为您节省少量时间。如果您不需要跟踪对模型所做的任何更改,您还可以使用AsNoTracking来改善内存消耗。例如,如果您通过休息请求返回它而不调用保存。以上就是C#学习教程:实体框架-使用前检查单条记录的正确方法分享的所有内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注-本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
