Sdílet prostřednictvím


Connection Strings

Většina poskytovatelů databází vyžaduje připojovací řetězec pro připojení k databázi. Připojovací řetězec:

  • Může obsahovat citlivé informace, které je potřeba chránit.
  • Může být potřeba změnit, když se aplikace přesune do různých prostředí, jako je vývoj, testování a produkční prostředí.

Další informace najdete v tématu Zabezpečené toky ověřování.

ASP.NET Core

Konfigurace ASP.NET Core může ukládat připojovací řetězec s různými poskytovateli:

Warning

Tajné kódy by nikdy neměly být přidány do konfiguračních souborů.

Například nástroj Secret Manager může uložit heslo databáze. Při vytváření struktury a používání správce tajných kódů se připojovací řetězec skládá z Name=<database-alias>.

Další informace najdete v části Konfigurace v dokumentaci ASP.NET Core.

dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"

Pak, ve scaffoldingu, použijte připojovací řetězec, který se skládá z Name=<database-alias>.

dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer

Warning

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro nasazené testovací a produkční aplikace naleznete v tématu Bezpečné ověřovací procesy.

Následující příklad ukazuje připojovací řetězec uložený v appsettings.json.

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

Kontext se obvykle konfiguruje v Program.cs s připojovacím řetězcem, který se čte z konfigurace. Všimněte si GetConnectionString metoda hledá konfigurační hodnotu, jejíž klíč je ConnectionStrings:<connection string name>. GetConnectionString vyžaduje jmenný prostor 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));

Aplikace WinForms &WPF

Aplikace WinForms, WPF a ASP.NET 4 mají osvědčené vzory připojovacích řetězců. Připojovací řetězec byste měli přidat do souboru aplikace App.config nebo Web.config při použití ASP.NET. Připojovací řetězec obsahující citlivé informace, jako je uživatelské jméno a heslo, by měl chránit obsah konfiguračního souboru pomocí chráněné konfigurace.

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <connectionStrings>
    <add name="BloggingDatabase"
         connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
  </connectionStrings>
</configuration>

Tip

Nastavení providerName se nevyžaduje u připojovacích řetězců EF Core uložených v App.config, protože poskytovatel databáze je nakonfigurovaný prostřednictvím kódu.

Pak můžete číst připojovací řetězec pomocí API ConfigurationManager ve vaší metodě kontextu OnConfiguring. Možná budete muset přidat odkaz na System.Configuration sestavení architektury, aby bylo možné toto rozhraní API používat.

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

Univerzální platforma Windows (UPW)

Připojovací řetězce v aplikaci pro UPW jsou obvykle připojení SQLite, které pouze určuje místní název souboru. Obvykle neobsahují citlivé informace a není nutné je měnit při nasazování aplikace. Tyto připojovací řetězce obvykle nevadí ponechat v kódu, jak je uvedeno níže. Pokud je chcete přesunout mimo kód, upW podporuje koncept nastavení, podrobnosti najdete v části Nastavení aplikace v dokumentaci pro UPW.

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