我已经使用EF6一段时间了,我正要优化我对数据库执行的每个查询的最大程度。
有一点我只需要基于string
来获取Guid
,这并不是一个复杂的查询,但是我想知道什么是最佳实践以及原因:>
a)查找/查找异步
string senderName = Context.Senders.Find(senderId).Name;
b)在何处选择并选择FirstOrDefault / FirstOrDefaultAsync
string senderName = Context.Senders.Where(x => x.Id == senderId)
.Select(x => x.Name)
.FirstOrDefault();
我无法剖析它现在正在执行的SQL,但是由于a)
查询似乎“更简单”,因此b)
查询似乎使用了延迟执行(IQueryable
),这可能更有趣甚至与async
执行结合在一起。
我是对的吗?最佳选择是什么,为什么?
答案 0 :(得分:2)
使用查找更快。采石场很简单select * from t where id=[ID]
更加干净,并且EF6中不会发生任何数据库检查等操作,而在EF之上,则不需要解析Linq Where and Select statement
。
对于那些讨厌EF的人,我已经建立了一个像EF和旧的ADO.Net一样工作的ORM库。随着迁移,代码到数据库等所有这些都是当然可选的。 test prov的速度提高了100%,请检查它EntityWorker.Core
答案 1 :(得分:1)
如注释中所指出:a)将整个实体加载到内存中,而b)仅加载名称。如果只需要名称,那么b是更好的选择。