连接字符串

大多数数据库提供程序都需要连接字符串才能连接到数据库。 连接字符串:

  • 可以包含需要保护的敏感信息。
  • 当应用移动到不同的环境(例如开发、测试和生产)时,可能需要更改。

有关详细信息,请参阅 安全身份验证流

ASP.NET Core

ASP.NET 核心配置可以使用各种提供程序存储连接字符串:

警告

不应将机密添加到配置文件。

例如, 机密管理器工具 可以存储数据库密码。 在搭建基架和使用机密管理器时,连接字符串由它组成Name=<database-alias>

有关详细信息,请参阅 ASP.NET Core 文档的“配置”部分。

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

然后,在基架中,使用由Name=<database-alias>以下组成的连接字符串。

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

警告

本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流

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

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

上下文通常配置为Program.cs从配置中读取连接字符串。 请注意, GetConnectionString 方法查找其键为 ConnectionStrings:<connection string name>的配置值。 GetConnectionString 需要 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 和 WPF 应用程序

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

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