VerbindungszeichenfolgenConnection Strings

Die meisten Datenbankanbieter erfordern eine Form der Verbindungszeichenfolge zum Herstellen einer Datenbankverbindung.Most database providers require some form of connection string to connect to the database. Diese Verbindungszeichenfolge enthält vertrauliche Informationen, die geschützt werden müssen.Sometimes this connection string contains sensitive information that needs to be protected. Außerdem muss sie geändert werden, wenn Sie die Umgebung, wie z.B. Entwicklung, Test und Produktion, wechseln.You may also need to change the connection string as you move your application between environments, such as development, testing, and production.

.NET Framework-Anwendungen.NET Framework Applications

.NET Framework-Anwendungen, z.B. Windows Forms, WPF, Konsole und ASP.NET 4, verwenden ein bewährtes Muster für Verbindungszeichenfolgen..NET Framework applications, such as WinForms, WPF, Console, and ASP.NET 4, have a tried and tested connection string pattern. Die Verbindungszeichenfolge sollten Ihre Anwendungen-Datei "App.config" ("Web.config" bei Verwendung von ASP.NET) hinzugefügt werden.The connection string should be added to your applications App.config file (Web.config if you are using ASP.NET). Wenn Ihre Verbindungszeichenfolge enthält vertrauliche Informationen wie Benutzername und Kennwort, enthält Sie können den Inhalt der Konfigurationsdatei mit schützen der geschützten Konfiguration.If your connection string contains sensitive information, such as username and password, you can protect the contents of the configuration file using Protected Configuration.

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

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

Tipp

Die providerName-Einstellung in EF Core-Verbindungszeichenfolgen muss nicht in der Datei "App.config" gespeichert werden, weil der Datenbankanbieter über den Code konfiguriert wird.The providerName setting is not required on EF Core connection strings stored in App.config because the database provider is configured via code.

Anschließend können Sie die Verbindungszeichenfolge mithilfe der ConfigurationManager-API im Kontext Ihrer OnConfiguring-Methode auslesen.You can then read the connection string using the ConfigurationManager API in your context's OnConfiguring method. Sie müssen möglicherweise auf die Framework-Assembly System.Configuration verweisen, um diese API verwenden zu können.You may need to add a reference to the System.Configuration framework assembly to be able to use this 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);
    }
}

Universelle Windows-Plattform (UWP)Universal Windows Platform (UWP)

Verbindungszeichenfolgen in einer UWP-Anwendung sind in der Regel SQLite-Verbindungen, die nur einen lokalen Dateinamen angeben.Connection strings in a UWP application are typically a SQLite connection that just specifies a local filename. Sie enthalten typischerweise keine vertraulichen Informationen und müssen nicht geändert werden, wenn eine Anwendung bereitgestellt wird.They typically do not contain sensitive information, and do not need to be changed as an application is deployed. Daher ist es in Ordnung, wenn die Verbindungszeichenfolge im Code verbleibt, wie unten dargestellt.As such, these connection strings are usually fine to be left in code, as shown below. Wenn Sie die Verbindungszeichenfolge nicht im Code beibehalten möchten, unterstützt UWP das Konzept der Einstellungen. Weitere Informationen hierzu finden Sie im Abschnitt zu App-Einstellungen in der UWP-Dokumentation.If you wish to move them out of code then UWP supports the concept of settings, see the App Settings section of the UWP documentation for details.

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

ASP.NET CoreASP.NET Core

Das Konfigurationssystem in ASP.NET Core ist sehr flexibel, und die Verbindungszeichenfolge kann in appsettings.json, einer Umgebungsvariable, dem Speicher für Benutzergeheimnisse oder einer anderen Konfigurationsquelle gespeichert werden. In ASP.NET Core the configuration system is very flexible, and the connection string could be stored in appsettings.json, an environment variable, the user secret store, or another configuration source. Weitere Informationen finden Sie im Abschnitt zur Konfiguration in der ASP.NET Core-Dokumentation.See the Configuration section of the ASP.NET Core documentation for more details. Das folgende Beispiel zeigt die Verbindungszeichenfolge in der Datei appsettings.json.The following example shows the connection string stored in appsettings.json.

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

Der Kontext wird in der Regel in der Datei Startup.cs konfiguriert. Die Verbindungszeichenfolge wird dabei aus der Konfiguration gelesen.The context is typically configured in Startup.cs with the connection string being read from configuration. Im folgenden Beispiel sucht die GetConnectionString()-Methode nach einem Konfigurationswert, dessen Schlüssel ConnectionStrings:<connection string name> lautet.Note the GetConnectionString() method looks for a configuration value whose key is ConnectionStrings:<connection string name>.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}