I have a context to a read-only database for reporting and I am writing lots of code, like this:
using (var context = new ReportingContext()) { var reportXQuery = context.ReportX.AsNoTracking(); // Do stuff here with query... }
Is there a way to set the AsNoTracking
bit so that just new
ing up the ReportingContext
above would automatically use AsNoTracking
instead of needing to remember to explicitly call it every query?
In Entity Framework, change tracking is enabled by default. You can also disable change tracking by setting the AutoDetectChangesEnabled property of DbContext to false. If this property is set to true then the Entity Framework maintains the state of entities.
The AsNoTracking() extension method returns a new query and returned entities do not track by the context. It means that EF does not perform any additional task to store the retrieve entities for tracking. We can also change the default behavior of tracking at context instance level.
AsNoTracking() . This optimisation allows you to tell Entity Framework not to track the results of a query. This means that Entity Framework performs no additional processing or storage of the entities which are returned by the query.
Try changing your context constructor to this:
public ReportingContext() { this.Configuration.AutoDetectChangesEnabled = false; }
EDIT:
This will after all not help you, as stated on Arthur's blog, it is usable only in particular scenarios:
http://blog.oneunicorn.com/2012/03/12/secrets-of-detectchanges-part-3-switching-off-automatic-detectchanges/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With