用EF获得单一价值的最有效方法?

时间:2019-02-22 10:51:47

标签: c# .net entity-framework

我已经使用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执行结合在一起。

我是对的吗?最佳选择是什么,为什么?

2 个答案:

答案 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是更好的选择。