Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La maggior parte dei provider di database richiede un stringa di connessione per connettersi al database. La 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:
- Nel
appsettings.Development.json
oappsettings.json
file. - 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 utilizza Secret Manager, una stringa di connessione è costituita 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, utilizzare una stringa di connessione costituita 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 mostrata la stringa di connessione archiviata 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 la stringa di connessione letta dalla configurazione. Si noti che il metodo GetConnectionString cerca un valore di configurazione la cui chiave è ConnectionStrings:<connection string name>
.
GetConnectionString
richiede il namespace 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. La stringa di connessione deve essere aggiunta al file dell'applicazione App.config
o al Web.config
se si utilizza 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 le stringhe di connessione di EF Core archiviate in App.config perché il provider di database viene configurato tramite codice.
È quindi possibile leggere la 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");
}
}