Sto cercando di comprendere l'impatto delle prestazioni di avere una classe DbContext vs multiplo quando si utilizza il framework EF6.
Ad esempio, se abbiamo un DbContext semplice come questo:
public class MainDbContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public void AddCar(Car car)
{
Cars.Add(car);
SaveChanges();
}
}
Ora diciamo che ho un servizio che utilizza il suddetto DbContext nel modo seguente:
public class CarService
{
public List<Car> Cars { get; private set; }
public CarService()
{
var dbContext = new MainDbContext();
Cars = dbContext.Cars.ToList();
}
}
In quale momento DbContext è andato al database e ha recuperato tutte le auto archiviate nel database? È stato quando ho chiamato var dbContext = new MainDbContext();
o è stato quando ho chiamato Cars = dbContext.Cars.ToList();
?
Se precedente, se avessi un DbContext che contiene 100 tabelle, verranno interrogate tutte le 100 tabelle quando viene creato DbContext?
No. La query si verifica dopo aver enumerato una tabella. Anche nel tuo secondo esempio, non si connette ancora al database.
Si connetterà quando si enumera, ad esempio:
dbContext.Cars.ToList();
O
foreach (Car c in dbContext.Cars)
O associare la tabella a un controllo UI.
Tuttavia, quando fai un dove, ordina per, poi per, unisciti ecc. Es
var result = dbContext.Cars.Where(c => c.Id == 35).OrderBy(c => c.Name);
Non sarà connettersi al database. Stai solo preparando la sequenza logica di operazioni da tradurre in una query SQL.
DOPO L'AGGIORNAMENTO DELLA DOMANDA
Ora, il tuo secondo esempio, con ToList (), enumera i risultati e si connette al database per ottenere i dati.