subsonic 3.0.0.3 отказоустойчивое соединение с несколькими базами данных - PullRequest
1 голос
/ 22 сентября 2009

Я использую MVC и Subsonic 3.0.0.3, но я не могу определить конкретную точку для соединения с несколькими базами данных.

обычно в нормальном .net я бы имел 2 строки в файле web.config и иметь класс базы данных для моего проекта, в этом классе БД я бы сделал что-то вроде этого:

try
        {
            conn.ConnectionString = server1;
            conn.Open();
        }
        catch (MySqlException)
        {
            conn.ConnectionString = server2;
            conn.Open();
        }

Я пытаюсь определить одно место в файлах, созданных с помощью SubSonic, где было бы лучше разместить что-то подобное и, возможно, современный пример того, как этого добиться. Я гуглил и т. Д., Но примеры приведены для более старых дозвуковых.

большое спасибо

1 Ответ

1 голос
/ 28 сентября 2009

Если вы посмотрите в Context.tt строку 35, вы увидите следующий код:

public <#=DatabaseName#>DB() 
{ 
    DataProvider = ProviderFactory.GetProvider("<#=ConnectionStringName#>");
    Init();
}

Именно здесь провайдер настраивает вас, поэтому, если вы добавите переменную BackupConnectionStringName в Settings.ttinclude после ConnectionStringName в строке 20, вы сможете проверить, работает ли ваше соединение, и, если нет, использовать ваш запасной вариант. Например:

public <#=DatabaseName#>DB() 
{ 
    DataProvider = ProviderFactory.GetProvider("<#=ConnectionStringName#>");
    Init();
    try
    {
        DataProvider.CreateConnection();
    }
    catch(SqlException)
    {
       DataProvider = ProviderFactory.GetProvider("<#=BackupConnectionStringName#>");
       Init(); 
    }
}

NB. Вам может потребоваться выполнить некоторую очистку, чтобы убедиться, что CreateConnection не оставляет соединение открытым.

...