OK, Google, non sono in grado di cercarlo su google. La documentazione dice
Il modello per quel contesto viene quindi memorizzato nella cache ed è per tutte le altre istanze del contesto nel dominio dell'app. Questa memorizzazione nella cache può essere disabilitata impostando la proprietà ModelCaching sul ModelBuidler specificato
e SO lo conferma . Ma non riesco a trovare il modo di farlo. Devo disabilitare la memorizzazione nella cache perché voglio ottenere dati da diverse tabelle di log con la stessa struttura tramite un solo modello, quindi il mio codice sembra
logTableNames.ForEach(n =>
{
using (var context = new LogContext(n))
{
Console.WriteLine($"Project: {n} -- {context.Logs.Count()} rows.\n");
}
});
e configurare con
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Log>().ToTable(_tableName);
}
ma il metodo 'OnModelCreating' viene chiamato solo una volta e non riesco a riconfigurare il mapping delle tabelle. Quindi forse c'è un altro vero modo di fare il mio compito?
Ecco la risposta del Program Manager del team Entity Framework.
Rowan Miller (MSFT)
Abbiamo rimosso CacheForContextType in CTP5, in origine intendevamo utilizzarlo quando gli utenti volevano utilizzare lo stesso contesto nello stesso AppDomain con modelli diversi. Il problema è che creerebbe il modello su ogni inizializzazione e non permetteva alcun modo di memorizzare nella cache una serie di modelli e scegliere quale utilizzare durante ogni inizializzazione. La creazione del modello è costosa quindi volevamo promuovere un modello migliore.
Lo schema che consigliamo è di creare esternamente un ModelBuilder -> DbDatabaseMapping -> DbModel per ogni modello che si desidera utilizzare. DbModel deve essere memorizzato nella cache e utilizzato per creare istanze di contesto. Il flusso di lavoro ModelBuilder -> DbModel è un po 'disordinato e i nomi delle classi non sono eccezionali, verranno riordinati per RTM.