简体   繁体   中英

Entity Framework Core 3.0 .Include call taking 10x more time

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM