Stringhe di connessione
La maggior parte dei provider di database richiede un stringa di connessione per connettersi al database. Il stringa di connessione:
- Può contenere informazioni riservate che devono essere protette.
- Potrebbe essere necessario modificare quando l'app passa a ambienti diversi, ad esempio sviluppo, test e produzione.
Per altre informazioni, vedere Proteggere i flussi di autenticazione
ASP.NET Core
La configurazione di ASP.NET Core può archiviare stringa di connessione con diversi provider:
appsettings.Development.json
Nel file oappsettings.json
.- In una variabile di ambiente
- Uso di Azure Key Vault
- Uso dello strumento Secret Manager
Avviso
I segreti non devono mai essere aggiunti ai file di configurazione.
Ad esempio, lo strumento Secret Manager può archiviare la password del database. Quando si esegue lo scaffolding e si usa Gestione segreti, un stringa di connessione è costituito da Name=<database-alias>
.
Per altre informazioni, vedere la sezione Configurazione della documentazione di ASP.NET Core.
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
Quindi, nello scaffolding, usare un stringa di connessione costituito da Name=<database-alias>
.
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
Avviso
Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.
Nell'esempio seguente viene illustrato il stringa di connessione archiviato in appsettings.json
.
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
Il contesto viene in genere configurato in Program.cs
con il stringa di connessione letto dalla configurazione. Si noti che il metodo GetConnectionString cerca un valore di configurazione la cui chiave è ConnectionStrings:<connection string name>
. GetConnectionString
richiede lo spazio dei nomi Microsoft.Extensions.Configuration .
var conString = builder.Configuration.GetConnectionString("BloggingContext") ??
throw new InvalidOperationException("Connection string 'BloggingContext'" +
" not found.");
builder.Services.AddDbContext<BloggingContext>(options =>
options.UseSqlServer(conString));
Applicazioni WinForms e WPF
WinForms, WPF e ASP.NET 4 applicazioni hanno un modello di stringa di connessione provato e testato. Il stringa di connessione deve essere aggiunto al file dell'applicazione App.config
o Web.config
quando si usa ASP.NET. La stringa di connessione contenente informazioni riservate, ad esempio nome utente e password, deve proteggere il contenuto del file di configurazione usando La configurazione protetta.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BloggingDatabase"
connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
</connectionStrings>
</configuration>
Suggerimento
L'impostazione providerName
non è necessaria per ef core stringa di connessione archiviati in App.config perché il provider di database è configurato tramite codice.
È quindi possibile leggere il stringa di connessione usando l'API ConfigurationManager
nel metodo del OnConfiguring
contesto. Potrebbe essere necessario aggiungere un riferimento all'assembly del System.Configuration
framework per poter usare questa API.
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
}
}
Piattaforma UWP (Universal Windows Platform)
Le stringhe di connessione in un'applicazione UWP sono in genere una connessione SQLite che specifica solo un nome file locale. In genere non contengono informazioni riservate e non è necessario modificarle durante la distribuzione di un'applicazione. Di conseguenza, queste stringa di connessione in genere vanno lasciate nel codice, come illustrato di seguito. Se vuoi spostarli fuori dal codice, UWP supporta il concetto di impostazioni, vedi la sezione Impostazioni app della documentazione UWP per informazioni dettagliate.
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=blogging.db");
}
}