Тестирование соединения базы данных Entity Framework
У меня есть приложение, которое подключается к базе данных MYSQL через инфраструктуру сущности. Он работает на 100% отлично, но я хотел бы добавить небольшой фрагмент кода, который будет проверять соединение с базой данных при запуске приложения.
У меня возникла идея просто запустить крошечную команду в базу данных и перехватить любые исключения, однако, если есть проблема (например, отсутствует App.Config или сервер базы данных), приложение занимает огромное количество времени для запуска этого кода а затем выбросить исключение (~ 1 мин). Я предполагаю, что это связано с тайм-аутами соединения и т.д., Но я искал такие свойства безрезультатно.
Кто-нибудь сможет помочь с любыми идеями относительно того, куда идти?
Ответы
Ответ 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());
}
}
}