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,多个主机名以英文逗号隔开。