我知道这是一个老问题,但我有一个类似的设置(但使用 .NET Core 2.0),我花了一段时间才弄清楚如何在不使用 web.config 来管理它的情况下设置默认数据库连接。
我所做的是在 appsettings.json 中包含默认数据库和所有连接字符串,然后在我的 Startup 类中,我将 appsettings.json 读取到我定义的对象中,以存储默认数据库名称和连接字符串并配置默认 + 命名数据库使用 DatabaseFactory.SetDatabase。
DatabaseFactory.SetDatabases() 定义
public class DataConfiguration
{
public string DefaultDatabase { get; set; }
public List<ConnectionStringSettings> ConnectionStrings { get; set; }
}
public class Startup
{
public Startup(IConfiguration configuration)
{
//Get the Database Connections from appsettings.json
DataConfig = configuration.Get<DataConfiguration>();
var defaultDb = DataConfig.ConnectionStrings?.Find(c => c.Name == DataConfig.DefaultDatabase);
DatabaseFactory.SetDatabases(() => new SqlDatabase(defaultDb.ConnectionString), GetDatabase);
Configuration = configuration;
}
public Database GetDatabase(string name)
{
var dbInfo = DataConfig.ConnectionStrings.Find(c => c.Name == name);
if (dbInfo.ProviderName == "System.Data.SqlClient")
{
return new SqlDatabase(dbInfo.ConnectionString);
}
return new MySqlDatabase(dbInfo.ConnectionString);
}
}