В TCP-соединениях есть только один гарантированный способ понять, если соединение еще живо, это отправка нового пакета в открытый сокет.
Так что, пока мы предполагаем, что вы подключены к Sql Server через TCP-соединение, это правило также применимо к нему. Поэтому вам нужно отправить данные и подождать, если возникнет исключение.
public bool IsConnected()
{
if (db == null) //db here is an Entity
return false;
//in my case Connection is an sqlconnection object so you can
//apply the same to your connection
if (db.Database.Connection.State == ConnectionState.Closed)
return false;
try
{
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "SELECT 0";
cmd.ExecuteNonQuery();
}
catch
{
return false;
}
return true;
}