Подтвердить что ты не робот

Тестирование соединения базы данных Entity Framework

У меня есть приложение, которое подключается к базе данных MYSQL через инфраструктуру сущности. Он работает на 100% отлично, но я хотел бы добавить небольшой фрагмент кода, который будет проверять соединение с базой данных при запуске приложения.

У меня возникла идея просто запустить крошечную команду в базу данных и перехватить любые исключения, однако, если есть проблема (например, отсутствует App.Config или сервер базы данных), приложение занимает огромное количество времени для запуска этого кода а затем выбросить исключение (~ 1 мин). Я предполагаю, что это связано с тайм-аутами соединения и т.д., Но я искал такие свойства безрезультатно.

Кто-нибудь сможет помочь с любыми идеями относительно того, куда идти?

4b9b3361

Ответ 1

Вы просто хотите узнать, действительно ли соединение с БД. Если да, взгляните на

using (DatabaseContext dbContext = new DatabaseContext())
{
     dbContext.Database.Exists();
}

http://msdn.microsoft.com/en-us/library/gg696617(v=vs.103).aspx EF5 https://msdn.microsoft.com/en-us/library/gg696617(v=vs.113).aspx для EF6

и для проверки того, что серверная машина занята сервером БД или сервером веб-служб, попробуйте следующее:

public PingReply Send( string hostNameOrAddress )

http://msdn.microsoft.com/en-us/library/7hzczzed.aspx

Ответ 2

Решение, указанное в @Daniloloko, указывает на вызов DbContext.Database.Connection.Open()

Он тестируется с помощью EF6.

Моя реализация:

    public static bool CheckConnection()
    {
        try
        {
            MyContext.Database.Connection.Open();
            MyContext.Database.Connection.Close();
        }
        catch(SqlException)
        {
            return false;
        }
        return true;
    }

Ответ 3

Я использую этот код для своего проекта:

private bool TestConnectionEF()
        {
            using (var db = new SistemaContext())
            {
                try
                {
                    db.Database.Connection.Open();
                    if (db.Database.Connection.State == ConnectionState.Open)
                    {
                        Console.WriteLine(@"INFO: ConnectionString: " + db.Database.Connection.ConnectionString 
                            + "\n DataBase: " + db.Database.Connection.Database 
                            + "\n DataSource: " + db.Database.Connection.DataSource 
                            + "\n ServerVersion: " + db.Database.Connection.ServerVersion 
                            + "\n TimeOut: " + db.Database.Connection.ConnectionTimeout);
                        db.Database.Connection.Close();
                        return true;
                    }
                    return false;
                }
                catch(Exception ex)
                {
                    throw new Exception(ex.Message + " \n PING: " + TryPing(db.Database.Connection.DataSource).ToString());
                }
            }
        }