Ansiosi Caricamento radici di aggregazione con Entity Framework
-
13-09-2019 - |
Domanda
Vorrei creare un approccio più strutturato per caricare l'entità-albero necessaria:
Ho bisogno di una gran quantità di dati, in modo che sto facendo questo utilizzando type-safe Include (solo una normale includono, ma con il Lambda di) come mostrato qui .
Come ho detto, ho bisogno di un sacco di dati, in pratica un albero intera entità di cui al punto 1 genitore.
Ora, potrei fare questo fare qualcosa di simile:
context.House
.Include(x => x.Doors)
.Include(x => x.Doors.FirstOrDefault().Joint)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
.Include(x => x.Windows)
// ... same thing
.Include(x => x.Roof)
// ... same thing
Come si può vedere, questa linea piena di include può diventare piuttosto grande. Questo è in realtà un campione molto semplificata del codice vero e proprio (che non include case BTW)
Quindi quello che vorrei fare è la creazione di metodi, responsabile per la sua filiale nella struttura. In cui il metodo può accettare la query oggetto e includere il bambino, ed a sua volta, chiamare i "metodi bambino-Loader". Inoltre, il genitore non dovrebbe importare, fintanto che ha una proprietà con il tipo di bambino.
Questo probabilmente non ha molto senso in questo modo:
public void LoadHouse(int id)
{
// ...
ObjectQuery<House> query = context.House;
// and now?
LoadDoors(query, x => x.Door);
}
public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
// ... ?
LoadJoints(...)
}
E così via. Ma non posso davvero ottenere la mia testa intorno ad esso ... C'è un anello mancante tra la query in entrata e chiamando i metodi bambino.
qualcuno ha fatto qualcosa di simile? Oppure qualcuno potrebbe darmi alcune indicazioni?
Soluzione
Prova qualcosa come questo, invece:
query = LoadDoors (query, x => x.Door);
Dove LOADX restituisce il risultato della chiamata Includi.