Entity Framework Classic Include

Description

The Include method let you to add related entities to the query result.

In EF Classic, the Include method doesn't longer return an IQueryable but instead an IncludeDbQuery that allows you to chain multiple related objects to the query result by using the AlsoInclude and ThenInclude methods.

ctx.Customers
	.Include(customer => customer.Orders)
		.ThenInclude(order => order.OrderDetails)
		.ThenInclude(orderDetail => orderDetail.Product)
			.AlsoInclude(product => product.Category)
			.AlsoInclude(product => product.Supplier)
	.ToList();

Try it

Note

  • If you want to include items from the same level, use AlsoInclude
  • If you want to include items from the next level, use ThenInclude

Limitation

DbQuery

Chaining includes only work if the first include call is from a DbQuery. If you used some LINQ and the query is currently an IQueryable, you can use the method AsDbQuery to tell the compiler that's a DbQuery. This restriction is currently required to avoid some side impact with queries that are not directly using DbQuery class.

ctx.OrderDetails
	.Where(orderDetail => orderDetail.Quantity > 1)
	.AsDbQuery()
	.Include(orderDetail => orderDetail.Product)
		.AlsoInclude(product => product.Category)
		.AlsoInclude(product => product.Supplier)
	.ToList();

Try it

It's planned to remove this limitation

In this Page