Ecco come dichiarare un DB Contesto secondo il libro "Pro ASP.NET Core MVC 2", Adam Freeman. Cosa significa questo parametro:
DbContextOptions<ApplicationDbContext> options : base(options) { }
Cercando di capire le opzioni nel dichiarare DBContext.
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.DependencyInjection;
namespace SportsStore.Models
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options):
base(options)
{
}
public DbSet<Product> Products { get; set; }
}
}
Hai un ApplicationDbContext
che eredita da DbContext
come ogni contesto di database. Rappresenta il tuo oggetto di database nel codice a cui faresti operazioni CRUD. Poiché stai ereditando hai la possibilità di chiamare il costruttore di base che fa - in tal caso - l'inizializzazione. Potrebbe non richiedere nessuno o un parametro di tipo DbContextOptions<T>
o DbContextOptions
in concreto DbContextOptions<ApplicationDbContext>
- questa è la chiamata di base(options)
. È possibile trovare una spiegazione più dettagliata e forse migliore in questo articolo di MS doc (Riferimento C #) L'implementazione della classe base è disponibile su GitHub - repository di EntityFramework Core . (Il collegamento fa riferimento al costruttore di base che stai chiamando nel tuo codice.)
Gli DbContextOptions<ApplicationDbContext>
includono la configurazione che potresti aver impostato prima di iniettarla nel tuo ApplicationDbContext
.
Più dettagliato dall'articolo MS docs - Configurazione di DbContextOptions :
DbContext
deve avere un'istanza diDbContextOptions
per poter eseguire qualsiasi lavoro. L'istanzaDbContextOptions
contiene informazioni di configurazione come:
- Il provider di database da utilizzare, in genere selezionato richiamando un metodo come
UseSqlServer
oUseSqlite
- Qualsiasi stringa di connessione o identificativo necessario dell'istanza del database, in genere passata come argomento al metodo di selezione del provider sopra menzionato
- Qualsiasi selettore di comportamento facoltativo a livello di provider, in genere anche incatenato all'interno della chiamata al metodo di selezione del provider
- Eventuali selettori di comportamento generali di EF core, generalmente concatenati dopo o prima del metodo di selezione del provider
In generale DbContextOptions
è un contenitore che include l'intera configurazione del contesto del database. Si potrebbe definire ad esempio se si tratta di un database SQL
o in-memory
e del comportamento di rilevamento delle modifiche. Link nel commento della domanda già menzionato e anche nella mia risposta, l' articolo del MS doc fornirà le informazioni e l'esempio necessari.