I reviewed almost everything online but couldn’t get it work in a reasonable time.
Entity Framework Core 3.0 .Include
call is taking 10x more time than calling the individual tables separately and then mapping them in C# code.
I have two tables product
and productimages
, where product productimages is a collection inside product.
Now when I chain the call with .Include
function, it takes forever to get the records form DB:
products = _context.ProductUploadQueue .Include(x => x.ProductUploadQueueImage) .Where(x => x.ClientId == clientId && x.PalletId == palletID) .ToList();
but if I do the same while calling the both tables individually and not chaining the Include call, it speeds up everything:
var g = _context.ProductUploadQueue .AsNoTracking() .Where(x => x.ClientId == clientId && x.PalletId == palletID) .ToList(); var hp = g.Select(x => x.Id); var y = _context.ProductUploadQueueImage .Where(x => hp.Contains(x.ProductUploadQueueId)) .ToList();
How can I speed it up?
Advertisement
Answer
how can I speed it up?
You just discovered how. Go back and look at g
and you’ll find that all of the productUploadQueueImage
navigation properties have been populated. When you run the second query the Change Tracker will fix-up any relationships as it loads the second colleciotn.
Before EF Core 3, Include queries could be executed in multiple round-trips, like you are doing here. Generating a single query that includes multiple tables is often significantly slower.