繁体   English   中英

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

[英]Most efficient way to get a single value with EF?

我已经使用EF6一段时间了,正处于需要优化我对数据库执行的每个查询的最大程度的时候。

有一点我只需要基于Guid获取一个string ,这并不是一个复杂的查询,但是我想知道什么是最佳实践以及原因:

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执行结合使用也可能更有趣。

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

使用查找更快。 采石场非常简单,请select * from t where id=[ID]更干净,并且不会在EF6中进行任何数据库检查等操作,并且在EF的顶部不需要解析Linq Where and Select statement

对于那些讨厌EF的人,我已经建立了一个像EF和旧的ADO.Net一样工作的ORM库。 随着迁移,代码到数据库等所有这些都是当然可选的。 测试证明的速度要快100%,请检查EntityWorker.Core

如注释中所指出:a)将整个实体加载到内存中,而b)仅加载名称。 如果仅需要名称,则b是更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM