Dela via


Connection Strings

De flesta databasprovidrar kräver en anslutningssträng för att ansluta till databasen. Anslutningssträngen:

  • Kan innehålla känslig information som måste skyddas.
  • Kan behöva ändras när appen flyttas till olika miljöer, till exempel utveckling, testning och produktion.

Mer information finns i Skydda autentiseringsflöden

ASP.NET Core

Konfigurationen av ASP.NET Core kan lagra anslutningssträngar med olika leverantörer.

Warning

Hemligheter bör aldrig läggas till i konfigurationsfiler.

Secret Manager-verktyget kan till exempel lagra databaslösenordet. När du skapar och använder Secret Manager består en anslutningssträng av Name=<database-alias>.

Mer information finns i avsnittet Konfiguration i ASP.NET Core-dokumentationen .

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

Sedan använder du i scaffolding en anslutningssträng som består av Name=<database-alias>.

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

Warning

Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.

I följande exempel visas anslutningssträngen som lagras i appsettings.json.

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

Kontexten konfigureras vanligtvis i Program.cs med anslutningssträngen som läses från konfigurationen. Observera att metoden GetConnectionString letar efter ett konfigurationsvärde vars nyckel är ConnectionStrings:<connection string name>. GetConnectionString kräver namnområdet 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));

WinForms och WPF-program

WinForms, WPF och ASP.NET 4-program har ett beprövat mönster för anslutningssträngar. Anslutningssträngen ska läggas till i programmets App.config fil eller Web.config när du använder ASP.NET. Anslutningssträng som innehåller känslig information, till exempel användarnamn och lösenord, bör skydda innehållet i konfigurationsfilen med skyddad konfiguration.

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

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

Tip

Inställningen providerName krävs inte för EF Core-anslutningssträngar som lagras i App.config eftersom databasprovidern har konfigurerats via kod.

Du kan sedan läsa anslutningssträngen med hjälp av API:et ConfigurationManager i kontextmetoden OnConfiguring . Du kan behöva lägga till en referens till ramverkssammansättningen System.Configuration för att kunna använda det här API:et.

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

Universal Windows Platform (UWP)

Anslutningssträngar i ett UWP-program är vanligtvis en SQLite-anslutning som bara anger ett lokalt filnamn. De innehåller vanligtvis inte känslig information och behöver inte ändras när ett program distribueras. Därför är dessa anslutningssträngar vanligtvis bra att lämna i kod, som visas nedan. Om du vill flytta bort dem från koden stöder UWP begreppet inställningar i avsnittet Appinställningar i UWP-dokumentationen för mer information.

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