Как я могу управлять несколькими базами данных в linq2db - PullRequest
0 голосов
/ 03 января 2019

Я хочу управлять несколькими подключениями к базе данных в моем приложении. Я использую ASP.NET Core & linq2db.Для моего первого подключения к базе данных у меня есть нижеуказанная конфигурация и она работает нормально.

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") { }
}

Для моей второй базы данных

Для моего второго подключения к базе данных я создаю подобную конфигурацию, подобную этой.Но это не работает.

public class DatabaseYSettings : ILinqToDBSettings
{
    ....... 
}

public static class DatabaseYStartup
{
    .......
}


public class DatabaseY : DataConnection
{
    public DatabaseY() : base("DatabaseY") { }
}

Мой appsettings.json

  {
"Logging": {
    "LogLevel": {
        "Default": "Warning"
    }
},
"AllowedHosts": "*",
"ConnectionStrings": {
    "DatabaseX": "Data Source=..........",
    "DatabaseY": "Data Source=.........."
}

}

LinqToDB.LinqToDBException: 'Конфигурация' DatabaseY 'не определена.'

IsЕсть ли другой способ сделать это.

1 Ответ

0 голосов
/ 03 января 2019

Редактировать: добавлен пример

Вам не нужны два экземпляра ILinqToDBSettings. Вам следует переместить вторые настройки базы данных в первый класс настроек, чтобы ConnectionStrings возвращал обе строки соединения.

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);
    }
}
...