EF Core 连接字符串应存于 appsettings.json 并通过 IConfiguration 注入读取,开发用 User Secrets、生产用环境变量,禁止硬编码或写死在 DbContext 中。
EF Core 的连接字符串不该硬编码,也不该放在 DbContext 类里写死。最安全、最灵活的做法是:统一存进 appsettings.json,再通过 IConfiguration 注入读取,配合环境隔离和敏感信息保护机制。
这是 ASP.NET Core 官方推荐方式,支持多环境切换(Development/Production),也便于 CI/CD 管理。
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyAppDb;User Id=sa;Password=StrongPass123!;"
}
}
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Server=localhost;Database=MyAppDb;User Id=sa;Password=DevOnly123!;"
在 Program.cs(.NET 6+)中用 Configuration.GetConnectionString() 获取,不要拼接或写死:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")))
options.UseSqlServer("Server=localhost;Database=MyAppDb;User Id=sa;Password=123456;") // 密码明文暴露
数据库密码、账号等属于高危凭据,不能出现在源码、Git 历史或日志中。
export ConnectionStrings__DefaultConnection="Server=prod-sql;Database=MyApp;User Id=appuser;Password=$DB_PASS;"
如果项目分 UI 层、Domain 层、Infrastructure 层,DbContext 和连接字符串配置逻辑应只出现在 UI 层(如 Web API 项目),因为:
基本上就这些。核心就一条:连接字符串是配置项,不是代码逻辑——交给配置系统管,别自己造轮子。