Ho cercato un po 'su questo, ma finora non sono stato in grado di trovare una soluzione decente. Sto cercando di ottenere un'entità dal mio database senza le entità correlate ad essa collegate.
La funzione procede come segue return context.Entity.SingleOrDefault(n => n.Name == name)
dove context is a DbContext
.
A partire da ora la risposta contiene solo un'entità, ma con un aggiunta di 50 entità "figlio" di cui non ho bisogno.
Quale sarebbe il modo migliore per ottenere una singola entità dal db?
Utilizzo della EFC2.1 pre release build
Inoltre, se si utilizza DbContext.Entity.AsNoTracking
è possibile ottenere l'entità senza le raccolte DbContext.Entity.AsNoTracking
.
Non sono sicuro se l'intera entità verrà salvata dopo aver apportato le modifiche e chiamando DbContext.saveChanges()
Devi abilitare il Caricamento Lazy, semplicemente aggiungi una proprietà alla tua classe come questa.
public virtual ICollection<ChildType> NavigationProperty;
Ecco un documento molto utile per il caricamento dei dati correlati .
Recentemente ho scoperto che è possibile utilizzare anche DbContext.Entity.AsNoTracking()
per questo scopo.
L'utilizzo di una query linq durante il recupero di un'entità causerà il recupero di tutte le entità correlate contenute nel linq.
Supponi di avere a Teacher, a Student and a Classroom entity
. Un insegnante può avere più studenti e classi. Vuoi trovare tutti gli insegnanti con classe A e tutti gli studenti maschi, così faresti
DbContext.Teachers.Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male")
Questo preleverà le Teacher entities
con tutte le Classrooms
e gli Students
sottostanti poiché li hai richiamati nell'espressione linq. Dal momento che vuoi solo l'entità Insegnante dovresti usare quanto segue:
DbContext.Teachers.AsNoTracking().Where(x => x.Classroom.Name = "A" && x.Student.Gender = "Male")
Usando AsNoTracking()
dichiari di non volere i dati sottostanti e solo di averne bisogno per filtrare attraverso l'entità che vuoi.