Please, suppose that architecture:
public class Mammal
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Dog : Mammal
{
public int TailId { get; set; }
public Tail Tail { get; set; }
}
public class Bat : Mammal
{
public int WingId { get; set; }
public Wing Wing { get; set; }
}
public class Buffalo : Mammal
{
public virtual ICollection<Horn> Horns { get; set; }
}
public class Tail
{
public int Id { get; set; }
...
}
public class Wing
{
public int Id { get; set; }
...
}
public class Horn
{
public int Id { get; set; }
...
}
Now, my context:
public class MyContext : DbContext
{
public DbSet<Mammal> Mammals { get; set; }
}
So, I want to make ONLY ONE sql query, and include (and load) all nested entities, something like:
var query = myContext.Mammals
.IncludeIfTypeIs<Dog>(d => d.Tail)
.IncludeIfTypeIs<Bat>(b => b.Wing)
.IncludeIfTypeIs<Buffalo>(b => b.Horns)
...
...
;
I know that I can do that separately, but I don't want because I have many entities, and I need to minimize database requests.
I don't want use lazy loading because this will make many database requests also.
How to achieve that?
i faced problem like that and here how i solved it:
public IEnumerable<OrderLine> GetAllOrderLinesData()
{
var _StockOrderLines = appContext.OrderLines.OfType<StockOrderLine>()
.Include(p => p.Order).Include(p => p.Product);
var _AnnualOrderLines = appContext.OrderLines.OfType<AnnualOrderLine>()
.Include(p => p.Order).Include(p => p.Customer);
return _StockOrderLines.ToList<OrderLine>().Union<OrderLine>(_AnnualOrderLines.ToList<OrderLine>());
}
you can change classes as yours :)