连接字符串
大多数数据库提供程序都需要连接字符串才能连接到数据库。 连接字符串:
- 可以包含需要保护的敏感信息。
- 当应用移动到不同的环境(例如开发、测试和生产)时,可能需要更改。
有关详细信息,请参阅 安全身份验证流
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");
}
}