我对实体框架的理解是,如果它可以从它的缓存中回答查询,它会。我简单的测试结果则显示,重复的查询访问数据库,即使他们之前得到的答复肯定:做Linq实体查询*总是*命中数据库?
var u1 = context.Users.SingleOrDefault(u => u.Id == 1);
var u2 = context.Users.SingleOrDefault(u => u.Id == 1);
这些查询都是成功的。对于每一个,我在SQL Profiler中看到一个SELECT TOP (2)
。
为什么EF转到数据库进行第二次查询?
这是美中不足的苍蝇。感谢您的信息,并链接到解决方案! – ladenedge 2010-10-11 15:32:38
这并非完全正确。我认为你会混淆EF和L2E。 LINQ to Entities默认不使用缓存,但EF *在其上下文中缓存物化实例。尝试,例如,'ObjectContext.GetObjectByKey' – 2010-10-11 16:09:00
@Craig Stuntz我的意思是透明的缓存(就像凝固意味着什么)。 – Andrey 2010-10-11 17:15:42