连接字符串Connection Strings

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

WinForms & WPF 应用程序WinForms & WPF Applications

WinForms、WPF 和 ASP.NET 4 应用程序都有一个已尝试并经过测试的连接字符串模式。 如果你使用的是 ASP.NET,则应将连接字符串添加到应用程序的 app.config 文件(web.config)中。 如果您的连接字符串包含敏感信息(例如用户名和密码),则可以使用机密管理器工具来保护配置文件的内容。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <connectionStrings>
  4. <add name="BloggingDatabase"
  5. connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
  6. </connectionStrings>
  7. </configuration>

提示

providerName由于数据库提供程序是通过代码配置的,因此在 app.config 中存储的 EF Core 连接字符串上不需要此设置。

然后,你可以 ConfigurationManager 在上下文的方法中使用 API 来读取连接字符串 OnConfiguring 。 可能需要添加对 System.Configuration 框架程序集的引用才能使用此 API。

  1. public class BloggingContext : DbContext
  2. {
  3. public DbSet<Blog> Blogs { get; set; }
  4. public DbSet<Post> Posts { get; set; }
  5. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  6. {
  7. optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
  8. }
  9. }

通用 Windows 平台 (UWP)Universal Windows Platform (UWP)

UWP 应用程序中的连接字符串通常是一个 SQLite 连接,只需指定本地文件名。 它们通常不包含敏感信息,并且在部署应用程序时无需更改。 因此,这些连接字符串通常可以保留在代码中,如下所示。 如果希望将它们移出代码,则 UWP 支持设置概念,有关详细信息,请参阅uwp 文档的 “应用设置” 部分

  1. public class BloggingContext : DbContext
  2. {
  3. public DbSet<Blog> Blogs { get; set; }
  4. public DbSet<Post> Posts { get; set; }
  5. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  6. {
  7. optionsBuilder.UseSqlite("Data Source=blogging.db");
  8. }
  9. }

ASP.NET CoreASP.NET Core

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

例如,你可以使用机密管理器工具存储数据库密码,然后在基架中,使用只包含的连接字符串 Name=<database-alias>

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

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

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

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

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