Why does Entity Framework 6.x not cache results?

c# caching entity-framework entity-framework-6

Question

Perhaps I am misunderstanding the caching that DbContext and DbSet does but I was under the impression that there was some caching that would go on. I'm seeing behavior that I wouldn't expect when I run the following code:

var ctx = CreateAContext();
var sampleEntityId = ctx.SampleEntities.Select(i => i.Id)
                                       .Single(i => i == 3); //Calls DB as expected
var cachedEntityId = ctx.SampleEntities.Select(i => i.Id)
                                       .Single(i => i == 3); //Calls DB unexpectedly

What's going on here? I thought that part of what you get from DbSet is that it would first check the local cache to see if that object exists before querying the database. Is there just some sort of configuration option I am missing here?

1
40
2/11/2014 4:51:20 PM

Accepted Answer

What @emcas88 is trying to say is that EF will only check the cache when you use the .Find method on DbSet.

Using .Single, .First, .Where, etc will not cache the results unless you are using second-level caching.

43
5/23/2017 12:25:47 PM

Popular Answer

This is because the implementation of the extensor methods, use the Find method of the context

contextName.YourTableName.Find()

to verify first the cache. Hope it helps.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow