Vibrant download-related objects in EF Core using EF6 syntax

In EF6, we used to load related objects, such as:

query                                                   // (A)
  .Include(q => q.Employee.Supervisor.Office.Address)   
  .Include(q => q.Orders);

This will require loading all the objects in this chain.

In EF Core you have to do this:

query                                                   // (B)
  .Include(q => q.Employee)
    .ThenInclude(q => q.Supervisor)
      .ThenInclude(q => q.Office)
        .ThenInclude(q => q.Address)
  .Include(q => q.Orders);

which is many (many!) less friendly but works.

Our code base has tons of calls (A)that we need to upgrade to (B)so that we can use EF Core.

I found that in many cases the EF Core works fine with (A), although it shouldn't! ... and sometimes it fails completely.

It is an accident? Is it intended to work with (A)under certain circumstances? Because, if I shouldn't, I don't want to make many hundreds of changes, and then test them.

+4
1

EF Core, (.. ). , "" Include EF6, EF Core , RootEmployeeSupervisorOfficeAddress, ​​ string ( EF6, EF Core) "Employee.Supervisor.Office.Address". EF Core, , Include/ThenInclude, , , .

. , Order ICollction<OrderDetail> OrderDetails OrderDetail Vendor Vendor. string + + + "Orders.OrderDetails.Vendor", Include(q => q.Orders.OrderDetails.Vendor) ( ). EF6 EF Core . EF6 LINQ Select:

.Include(q => q.Orders.Select(o => o.OrderDetails.Select(d => d.Vendor)))

EF Core - ThenInclude :

.Include(q => q.Orders).ThenInclude(o => o.OrderDetails).ThenInclude(d => d.Vendor)

, - . EF6 , ( Expression<Func<T, object>>) EF . , EF Core "" , , .

- , EF6 EF Core. EF Core ( ), - . , Include - , Select , ThenInclude.

+3

Source: https://habr.com/ru/post/1677597/


All Articles