Sto usando EF Core. Ho circa 2500 record negli articoli della tabella del database.
In uno studio di gestione con SQL compilato da EF ottengo risultati in pochi MS. In programma circa 30 secondi. .Select () è il problema. Non so più come ottimizzarlo.
1: prima
List<Article> articles = await db.Articles.Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).ToListAsync();
2: ora
List<Article> articles = await db.Articles.FromSql("SELECT [x].[Title], [x].[Description], [x].[Body], [x].[Authors], [x].[PhotoAuthors], [x].[Tags] FROM[Articles] AS[x]").Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).ToListAsync();
Il risultato è sempre lo stesso: /
EDIT : la soluzione è di non usare .ToList ()
usando:
IQueryable<Article> articles = db.Articles.Select(x => new Article { Title = x.Title, Description = x.Description, Body = x.Body, Authors = x.Authors, PhotoAuthors = x.PhotoAuthors, Tags = x.Tags }).AsNoTracking();
IQueryable perde funzioni come .Split che ho usato in seguito o Intersects.
Penso che tu lo stia pensando.
var articles = db.Articles.ToList();
ti porta una lista di articoli Se davvero non vuoi selezionare campi extra, allora potresti fare a
var articles = db.Articles.Select(x => new {...}).ToList();
ma in generale non dovresti vedere molta differenza tra afferrare la totalità di vs solo alcune delle intestazioni. Quello di cui hai probabilmente bisogno è un. .Where
limitare le cose, ma se hai davvero bisogno di tutto, mantienilo semplice.