连接字符串

大多数数据库提供程序都需要某种形式的连接字符串才能连接到数据库。 有时,此连接字符串包含需要保护的敏感信息。 在开发、测试和生产等环境之间移动应用程序时,可能还需要更改连接字符串。

ASP.NET Core

在 ASP.NET Core 中,配置系统非常灵活,连接字符串可以存储在 appsettings.json、环境变量、用户机密存储或其他配置源中。 有关更多详细信息,请参阅 ASP.NET Core 文档的配置部分

例如,可以使用 Secret Manager 工具来存储数据库密码,然后在基架中使用仅包含 Name=<database-alias> 的连接字符串。

dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer

或者以下示例显示了存储在 appsettings.json 中的连接字符串。

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

上下文通常在 Startup.cs 中配置,并从配置中读取连接字符串。 请注意,GetConnectionString() 方法会查找键为 ConnectionStrings:<connection string name> 的配置值。 需要导入 Microsoft.Extensions.Configuration 命名空间才能使用此扩展方法。

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

WinForms 和 WPF 应用程序

WinForms、WPF 和 ASP.NET 4 应用程序具有可靠的经过测试的连接字符串模式。 连接字符串应添加到应用程序的 App.config 文件(如果使用的是 ASP.NET,则为 Web.config)。 如果连接字符串包含敏感信息(例如用户名和密码),可以使用受保护的配置来保护配置文件的内容。

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

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

提示

存储在 App.config 中的 EF Core 连接字符串不需要 providerName 设置,因为数据库提供程序通过代码进行配置。

可以在上下文的 OnConfiguring 方法中使用 ConfigurationManager API 读取连接字符串。 你可能还需要添加对 System.Configuration 框架程序集的引用才能使用此 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);
    }
}

通用 Windows 平台 (UWP)

UWP 应用程序中的连接字符串通常是仅指定本地文件名的 SQLite 连接。 它们通常不包含敏感信息,并且不需要在部署应用程序时进行更改。 因此,这些连接字符串通常可以留在代码中,如下所示。 如果想要将其移出代码,则 UWP 支持设置的概念,请参阅 UWP 文档的应用设置部分了解详细信息。

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