Tester rapidement la connectivité de la base de données dans Entity Framework

ado.net ado.net-entity-data-model entity-framework

Question

[ Je suis nouveau sur ADO.NET et Entity Framework, alors pardonnez-moi si cette question semble étrange. ]

Dans mon application WPF, un utilisateur peut basculer entre différentes bases de données au moment de l'exécution. Quand ils le feront, je veux pouvoir vérifier rapidement que la base de données est toujours disponible. Ce que j'ai facilement disponible est le ObjectContext. Le test que je suis en train de faire consiste à obtenir le décompte du nombre total d'enregistrements d'une très petite table. S'il renvoie des résultats, il réussit. Si j'obtiens une exception, il échouera. Je n’aime pas ce test, c’est la tâche la plus facile à faire avec ObjectContext.

J'ai essayé de définir le délai de connexion dans la chaîne de connexion et sur ObjectConntext et semble ne rien changer pour le premier scénario, alors que le second est déjà rapide, de sorte qu'il n'est pas perceptible s'il modifie quoi que ce soit.

Premier scénario

Si la connexion était interrompue avant le premier accès, il faut environ 30 secondes avant que le fournisseur sous-jacent ne fonctionne.

Deuxième scénario

Si la base de données était active au moment de démarrer l'application et d'y accéder, la connexion est interrompue lors de l'utilisation du test est rapide et revient presque instantanément.

Je veux que le premier scénario décrit soit aussi rapide que le second.

S'il vous plaît laissez-moi savoir la meilleure façon de résoudre ce problème, et s'il existe un meilleur moyen de tester rapidement la connectivité à une base de données, veuillez nous en informer.

Réponse acceptée

Il n'y a vraiment pas de moyen facile ou rapide de résoudre ce problème. La valeur ConnectionTimeout est ignorée avec Entity Framework. La solution que j’ai utilisée consiste à créer une méthode qui vérifie si un contexte est valide en indiquant l’emplacement à valider, puis en obtenant le nombre à partir d’une très petite table connue. Si cela lève une exception, le contexte n'est pas valide, sinon. Voici un exemple de code montrant cela.

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

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

    return isValid;
}

Réponse populaire

Vous devrez peut-être utiliser context.Database.Connection.Open ()



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow