2009-09-22 18 views
1

MVCとSubsonic 3.0.0.3を使用していますが、複数のデータベース接続の特定のポイントを特定できないようです。subsonic 3.0.0.3複数のデータベース接続のフェールオーバー

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

I:通常のノーマル.NETで私はweb.configファイル で私の2つの文字列を持っていると私はこのような何かをするだろう、このDBクラス内で、私のプロジェクトのためのデータベースのクラスを持っているでしょう

亜音速で作成したファイルで1つの場所をピン止めしようとしています。このような場所に置くのが最善で、それを達成する方法に関する最新の例があります。私はグーグルなどがありますが、表示されている例は古い亜音速のものです。

多くのおかげ

+0

サブソニックのページでは、接続文字列ですべてのコードを拡張できますが、実際にモデルクラスでこれをキャッチしたいと思っています。私はprovider2とDataProvider2を作成しました。しかし、どこでそれを取るべきかわからないのですが、context.csのINT()はプロバイダを使ってすべてを作成するようですが、ExcecuteTransactionでconnection.openを参照していますが、ここでどのように接続が動作するかを理解するのは難しいです。 ありがとう – davethecoder

答えて

1

あなたがライン35でContext.ttで見る場合は、次のコードを参照してくださいよ:あなたが追加した場合ので、プロバイダがあなたのためのセットアップを取得している場所です

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

をBackupConnectionStringName変数のConnection.Nameを20行目のConnectionStringNameの後に追加すると、接続が正常に動作していることを確認できるはずです。例:

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

NB CreateConnectionで接続が開いていないことを確認するには、いくつかのクリーンアップが必要な場合があります。

+0

これは、私が行っていたこと、素晴らしいものです。 – davethecoder

+0

var myconn = DataProvider.CreateConnection(); myconn.Close(); は、tryブロックで成功した試みの終了をカバーします。 – davethecoder

関連する問題