5

[私はADO.NETとEntityFrameworkを初めて使用するので、この質問がおかしいと思われる場合はご容赦ください。]

私のWPFアプリケーションでは、ユーザーは実行時に異なるデータベースを切り替えることができます。彼らがこれを行うとき、私はデータベースがまだ利用可能であることを簡単にチェックできるようにしたいと思います。私が簡単に利用できるのはObjectContextです。私が実行しているテストは、非常に小さなテーブルの合計レコードのカウントを取得しており、結果が返された場合は合格し、例外が発生した場合は失敗します。このテストは好きではありません。ObjectContextを使用するのが最も簡単なようです。

接続文字列とObjectConntextで接続タイムアウトを設定しようとしましたが、最初のシナリオでは何も変更されていないようですが、2番目のシナリオはすでに高速であるため、何かが変更されても目立ちません。

シナリオ1

最初のアクセスの前に接続がダウンした場合、基になるプロバイダーが失敗したという例外が発生するまでに約30秒かかります。

シナリオ2

アプリケーションを起動してデータベースにアクセスしたときにデータベースが起動していた場合、テストの使用中に接続が切断され、ほぼ瞬時に戻ります。

説明した最初のシナリオを2番目のシナリオと同じくらい速くしたいと思います。

これを解決する最善の方法を教えてください。DBへの接続をすばやくテストするためのより良い方法がある場合は、アドバイスしてください。

4

2 に答える 2

3

これを解決する簡単で迅速な方法は本当にありません。ConnectionTimeout値は、EntityFrameworkでは無視されます。私が使用した解決策は、検証する場所を渡してコンテキストが有効かどうかをチェックするメソッドを作成し、既知の非常に小さなテーブルからカウントを取得することです。これが例外をスローする場合、コンテキストは無効です。それ以外の場合は有効です。これを示すサンプルコードを次に示します。

public bool IsContextValid(SomeDbLocation location)
{
    bool isValid = false;

    try
    {
        context = GetContext(location);
        context.SomeSmallTable.Count();
        isValid = true;                
    }
    catch
    {
        isValid = false;
    }

    return isValid;
}
于 2010-01-26T19:56:09.223 に答える
0

context.Database.Connection.Open()を使用する必要がある場合があります

于 2014-03-17T06:52:04.027 に答える