prega, supponiamo che l'architettura:EF condizionale Calcola per tipo di entità
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, mio contesto:
public class MyContext : DbContext
{
public DbSet<Mammal> Mammals { get; set; }
}
Quindi, voglio fare solo una query SQL, e comprendono (e il carico) tutte le entità nidificate, qualcosa di simile:
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 utilizzare il caricamento lazy perché questo farà anche molte richieste di database.
Come raggiungerlo?
credo che questo non è possibile in quanto includono lavori sulla raccolta e sulla base di tale prepara la query ed esegue sql join ma per il tuo caso sembra che stia lavorando su una singola istanza di 'Mammal' che credo possa vanificare totalmente lo scopo del linq in sql. –
Grazie per il tuo commento, ma non credo che riusciremo a sconfiggere lo scopo di linq in sql. Senza questo sono obbligato a creare una query per ogni tipo di mamal e chiamare tutto ciò che è separato, questo sarà in ritardo e complicherà la mia applicazione. Nella mia applicazione, posso avere, ad esempio, diversi tipi di Horns, con proprietà diverse, e voglio anche caricare queste proprietà conditionnally ... –
Non avresti bisogno di iterare su tutti i mamals e controllare i loro tipi e includere solo se è di quel tipo ....? –