Asp.net core 如何在linq2db中管理多个数据库
我想在我的应用程序中管理多个数据库连接。我正在使用ASP.NET Core和linq2db。对于我的第一个数据库连接,我创建了以下配置,它工作正常Asp.net core 如何在linq2db中管理多个数据库,asp.net-core,multiple-databases,linq2db,Asp.net Core,Multiple Databases,Linq2db,我想在我的应用程序中管理多个数据库连接。我正在使用ASP.NET Core和linq2db。对于我的第一个数据库连接,我创建了以下配置,它工作正常 public class DatabaseXSettings : ILinqToDBSettings { public IEnumerable<IDataProviderSettings> DataProviders { get { yield break; } } public stri
public class DatabaseXSettings : ILinqToDBSettings
{
public IEnumerable<IDataProviderSettings> DataProviders
{
get { yield break; }
}
public string DefaultConfiguration => "Oracle.Managed";
public string DefaultDataProvider => "Oracle.Managed";
public string ConnectionString { get; set; }
public DatabaseXSettings(string connectionString)
{
ConnectionString = connectionString;
}
public IEnumerable<IConnectionStringSettings> ConnectionStrings
{
get
{
yield return
new ConnectionStringSettings
{
Name = "DatabaseX",
ProviderName = "Oracle.Managed",
ConnectionString = ConnectionString
};
}
}
}
public static class DatabaseXStartup
{
private static bool _started;
public static void Init(string connectionString)
{
if (!_started)
{
DataConnection.DefaultSettings = new DatabaseXSettings(connectionString);
_started = true;
}
}
}
public class DatabaseX : DataConnection
{
public DatabaseX() : base("DatabaseX") { }
}
My appsettings.json
}
LinqToDB.LinqToDBException:'未定义配置'DatabaseY'
还有别的办法吗 编辑:添加了示例
您不需要两个ILinqToDBSettings实例。您应该将第二个数据库设置移动到第一个设置类,这样ConnectionString将返回两个连接字符串
public class DatabaseSettings : ILinqToDBSettings
{
public IEnumerable<IDataProviderSettings> DataProviders
{
get { yield break; }
}
public string DefaultConfiguration => "Oracle.Managed";
public string DefaultDataProvider => "Oracle.Managed";
private readonly IConnectionStringSettings[] _connectionStrings;
public DatabaseSettings(IConnectionStringSettings[] connectionStrings)
{
_connectionStrings = connectionStrings;
}
public IEnumerable<IConnectionStringSettings> ConnectionStrings => _connectionStrings;
}
public static class DatabaseSetup
{
// just call it on application startup
public static void Init()
{
// create connectionStrings collection with both connection strings from appsettings.json
DataConnection.DefaultSettings = new DatabaseSettings(connectionStrings);
}
}
公共类数据库设置:ILinqToDBSettings
{
公共IEnumerable数据提供程序
{
获取{yield break;}
}
公共字符串DefaultConfiguration=>“Oracle.Managed”;
公共字符串DefaultDataProvider=>“Oracle.Managed”;
专用只读IConnectionStringSettings[]\u连接字符串;
公共数据库设置(IConnectionStringSettings[]连接字符串)
{
_ConnectionString=ConnectionString;
}
public IEnumerable connectionString=>\u connectionString;
}
公共静态类数据库设置
{
//只需在应用程序启动时调用它
公共静态void Init()
{
//使用appsettings.json中的两个连接字符串创建ConnectionString集合
DataConnection.DefaultSettings=新数据库设置(ConnectionString);
}
}
您能解释一下吗。我已经试过了,但没用。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DatabaseX": "Data Source=..........",
"DatabaseY": "Data Source=.........."
}
public class DatabaseSettings : ILinqToDBSettings
{
public IEnumerable<IDataProviderSettings> DataProviders
{
get { yield break; }
}
public string DefaultConfiguration => "Oracle.Managed";
public string DefaultDataProvider => "Oracle.Managed";
private readonly IConnectionStringSettings[] _connectionStrings;
public DatabaseSettings(IConnectionStringSettings[] connectionStrings)
{
_connectionStrings = connectionStrings;
}
public IEnumerable<IConnectionStringSettings> ConnectionStrings => _connectionStrings;
}
public static class DatabaseSetup
{
// just call it on application startup
public static void Init()
{
// create connectionStrings collection with both connection strings from appsettings.json
DataConnection.DefaultSettings = new DatabaseSettings(connectionStrings);
}
}