subsonic 3.0.0.3 аварийное переключение нескольких соединений с базой данных

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

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

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

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

огромное спасибо


person davethecoder    schedule 22.09.2009    source источник
comment
Могу я просто добавить, что я видел, как на странице дозвукового режима говорится, что я могу расширить весь свой код с помощью строки подключения, но я действительно хочу уловить это в классе модели ... Я создал provider2 и DataProvider2, но затем не знаю, где его взять, INT () в context.cs, кажется, просто использует provider для создания всего, и я вижу connection.open в ExcecuteTransaction, но я изо всех сил пытаюсь понять, где и как здесь работает соединение. Благодарность   -  person davethecoder    schedule 25.09.2009


Ответы (1)


Если вы посмотрите в 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.

person Adam Cooper    schedule 27.09.2009
comment
var myconn = DataProvider.CreateConnection (); myconn.Close (); охватывает закрытие успешной попытки в блоке try - person davethecoder; 28.09.2009