在 .NET 6 中配置连接字符串
问题概述
在 .NET 6 中,ASP.NET Core 框架进行了重大架构调整,传统的 Startup
和 Program
类被合并为一个单一的文件。这使得许多开发者在配置数据库连接字符串时感到困惑,特别是当他们尝试使用之前版本的代码时:
csharp
services.AddDbContext<DEMOWTSSPortalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
这段代码在 .NET 6 中将无法正常工作,因为 AddDbContext
方法在新的架构中不再直接可用。
解决方案
核心配置方法
在 .NET 6 中,推荐的配置方式是使用 WebApplicationBuilder
:
csharp
var builder = WebApplication.CreateBuilder(args);
// 获取连接字符串
string connString = builder.Configuration.GetConnectionString("DefaultConnection");
// 配置 DbContext
builder.Services.AddDbContext<YourContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});
关键变化
Configuration
现在是builder.Configuration
属性AddDbContext()
现在是builder.Services.AddDbContext()
- 不再需要单独的
Startup
类
完整配置步骤
1. 安装必要的 NuGet 包
在项目中安装以下依赖包:
bash
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
bash
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
2. 配置 appsettings.json
在 appsettings.json
文件中添加连接字符串:
json
{
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDataBaseName;User Id=YourDataBaseUserID;Password=YourDataBaseUserPassword;"
}
}
3. 配置 DbContext 类
确保你的 DbContext 类包含正确的构造函数:
csharp
public class YourDbContext : DbContext
{
public YourDbContext(DbContextOptions<YourDbContext> options)
: base(options)
{
}
// 你的 DbSet 属性
}
4. 在 Program.cs 中注册服务
在 Program.cs
文件中完成最终的配置:
csharp
var builder = WebApplication.CreateBuilder(args);
// 添加服务到容器
builder.Services.AddDbContext<YourDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
// 中间件配置...
备用配置方法(手动配置)
如果你需要更精细的控制,可以手动构建配置:
csharp
static string GetConnectionString()
{
var objBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfiguration conManager = objBuilder.Build();
var conn = conManager.GetConnectionString("SQLServerConnectionString");
return conn ?? string.Empty;
}
注意
这种方法需要安装额外的 NuGet 包:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
在控制器中访问连接字符串
如果需要直接在控制器中访问连接字符串,可以通过依赖注入获取:
csharp
public class HomeController : Controller
{
private readonly IConfiguration _configuration;
public HomeController(IConfiguration configuration)
{
_configuration = configuration;
}
public IActionResult Index()
{
var connectionString = _configuration.GetConnectionString("DefaultConnection");
// 使用连接字符串...
return View();
}
}
总结
.NET 6 通过引入 WebApplicationBuilder
简化了应用程序配置过程。关键要点:
- 使用
builder.Configuration
替代传统的Configuration
- 通过
builder.Services
注册服务 - 确保已安装必要的 Entity Framework Core 包
- 在
appsettings.json
中正确配置连接字符串
这种新的配置方式更加简洁和统一,减少了模板代码,提高了开发效率。