Skip to content

在 .NET 6 中配置连接字符串

问题概述

在 .NET 6 中,ASP.NET Core 框架进行了重大架构调整,传统的 StartupProgram 类被合并为一个单一的文件。这使得许多开发者在配置数据库连接字符串时感到困惑,特别是当他们尝试使用之前版本的代码时:

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 简化了应用程序配置过程。关键要点:

  1. 使用 builder.Configuration 替代传统的 Configuration
  2. 通过 builder.Services 注册服务
  3. 确保已安装必要的 Entity Framework Core 包
  4. appsettings.json 中正确配置连接字符串

这种新的配置方式更加简洁和统一,减少了模板代码,提高了开发效率。