Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AsNoTracking() and Include

I have a Linq query that fetches an entity and some of its navigation properties.

context.MyEntity     .AsNoTracking()     .Include(i=> i.Nav1)     .Include(i=> i.Nav2)     .Where(x=> x.Prop1==1)     .FirstOrDefault(); 

my question is:

Is the above query enough to not track MyEntity nor the navigation properties NAv1& Nav2 or must I add AsNoTracking for each navigation property?

like this:  

context.MyEntity     .AsNoTracking()     .Include(i=> i.Nav1)     .AsNoTracking()     .Include(i=> i.Nav2)     .AsNoTracking()     .Where(x=> x.Prop1==1)     .FirstOrDefault(); 
like image 842
Juan Pablo Gomez Avatar asked Feb 02 '17 12:02

Juan Pablo Gomez


1 Answers

Use AsNoTracking after you have completed all your query parameters but before you move the data into memory. In this example, you'll want:

context.MyEntity     .Include(i=> i.Nav1)     .Include(i=> i.Nav2)     .Where(x=> x.Prop1==1)     .AsNoTracking()     .FirstOrDefault(); 

Any child objects of the parent entity will not be tracked.

like image 61
Daniel Avatar answered Oct 16 '22 22:10

Daniel