Condividi tramite


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:

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");
    }
}