Per favore, supponiamo che l'architettura:
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; }
...
}
Ora, il mio contesto:
public class MyContext : DbContext
{
public DbSet<Mammal> Mammals { get; set; }
}
Quindi, voglio fare SOLO UNA query sql e includere (e caricare) tutte le entità nidificate, qualcosa del tipo:
var query = myContext.Mammals
.IncludeIfTypeIs<Dog>(d => d.Tail)
.IncludeIfTypeIs<Bat>(b => b.Wing)
.IncludeIfTypeIs<Buffalo>(b => b.Horns)
...
...
;
So che posso farlo separatamente, ma non voglio perché ho molte entità e ho bisogno di minimizzare le richieste del database.
Non voglio usare il caricamento lazy perché questo farà anche molte richieste di database.
Come raggiungerlo?
ho affrontato un problema del genere e qui ho risolto il problema:
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>());
}
puoi cambiare classe come la tua :)