Sto provando a caricare un elenco di colori distinti dall'elenco di prodotti precedentemente caricato in una pagina. Quindi, per tirare nei prodotti che faccio questo:Entity Framework AsNoTracking interrompe la chiamata a Distinct
var products = Products
.Include(p => p.ProductColor)
.ToList();
Poi faccio un po 'di trasformazione dei prodotti li voglio ottenere un elenco di tutti i colori distinti utilizzati dai prodotti, in modo faccio questo:
E questo funziona benissimo, tuttavia se aggiungo una chiamata allo .AsNoTracking()
alla chiamata dei prodotti originali, ora ottengo una voce nella mia lista colori per ogni voce nell'elenco prodotti.
Perché c'è una differenza in questi due? Esiste un modo per impedire a Entity Framework di tracciare gli oggetti (vengono utilizzati per sola lettura) e ottenere il comportamento desiderato?
Ecco la mia domanda dopo aver aggiunto la chiamata a AsNoTracking()
var products = Products
.AsNoTracking()
.Include(p => p.ProductColor)
.ToList();
Da ciò che hai postato .AsNoTracking dovrebbe funzionare bene, dove esattamente lo stai inserendo nella tua query –
@LukeMcGregor, ho aggiornato la domanda con la mia query con '.AsNoTracking' – heavyd
È solo un errore di battitura che la query termina con ToList e non vi è alcuna distinzione in esso? –