【.NET 6 Web API+EF Core】在分层项目中,根据运行环境读取配置文件的数据库连接字符串

Model 层

DbContext

public class AppDbContext : DbContext
{
    #region 导航属性
    #endregion

    public AppDbContext() { }

    // 为避免 EF 迁移失败,需要在这里加上默认的配置
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 当 DbContext 没有被配置时,为其配置默认的数据库连接字符串(推荐写开发环境)
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("数据库连接字符串");
        }
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly);
    }
}

Web API 层

Program.cs

// ...

var builder = WebApplication.CreateBuilder(args);

// ...

builder.Services.AddDbContext<AppDbContext>(options =>
{
    string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
    if (!environment.IsNullOrEmpty())
    {
        builder.Configuration.AddJsonFile($"appsettings.{environment}.json");
    }
    string connectionString = builder.Configuration.GetConnectionString("Default");
    // 根据使用的数据库修改方法
    options.UseSqlServer(connectionString);
});

// ...

var app = builder.Build();

appsettings.json

默认配置文件:

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "Default": "数据库连接字符串"
  }
}

获取不到环境变量名称时,读取默认配置文件。推荐写开发环境的连接字符串。

appsettings.Development.json

开发环境配置文件:

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "Default": "数据库连接字符串"
  }
}

开发环境的主机名一般不限制。

appsettings.Production.json

生产环境配置文件:

{
  "AllowedHosts": "生产环境域名",
  "ConnectionStrings": {
    "Default": "数据库连接字符串"
  }
}

生产环境的主机名一般设置为对应域名,例如:*.csdn.com,多个主机名以英文逗号隔开。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值