Testing an Entity Framework database connection

前端 未结 6 1660
我在风中等你
我在风中等你 2020-12-08 04:34

I have an app that connects to a MYSQL database through the entity framework. It works 100% perfectly, but I would like to add a small piece of code that will test the conne

相关标签:
6条回答
  • 2020-12-08 04:44

    I am using the following code for MS SQL connection. Maybe, it will be useful for MySQL too. You don’t even need to use an EF or EF Core.

        public bool IsDbConnectionOK()
        {
            SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder
            {
                DataSource = ButtonServerName.Text,  // <-- My Form Elements
                InitialCatalog = ButtonDBName.Text, // <-- My Form Elements
                UserID = EditUserName.Text, // <-- My Form Elements
                Password = EditPassword.Text, // <-- My Form Elements
                IntegratedSecurity = false,
                ConnectTimeout = 30
            };
    
            string connectionstring = conStr.ToString();
    
            try
            {
                using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionstring))
                {
                    connection.Open();
                    return true;
                }
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                MessageBox.Show(ex.Message + Environment.NewLine +
                    "Error line: " + ex.LineNumber + Environment.NewLine +
                    "Procedure name: " + ex.Procedure);
                return false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }
    
    0 讨论(0)
  • 2020-12-08 04:47

    I use this code for my project:

    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 ex;
                    }
                }
            }
    
    0 讨论(0)
  • 2020-12-08 04:50

    The solution as @Danilo Breda pointed out is to call the DbContext.Database.Connection.Open()

    It is tested with EF6.

    My implementaion:

        public static bool CheckConnection()
        {
            try
            {
                MyContext.Database.Connection.Open();
                MyContext.Database.Connection.Close();
            }
            catch(SqlException)
            {
                return false;
            }
            return true;
        }
    
    0 讨论(0)
  • 2020-12-08 04:53

    In EntityFramework Core you can simply call: Database.CanConnect();.

    (using EF Core 2.2.1)

    Summary: Determines whether or not the database is available and can be connected to.

    Note that being able to connect to the database does not mean that it is up-to-date with regard to schema creation, etc.

    0 讨论(0)
  • 2020-12-08 04:58

    I used the answer from @Sandor and did an extension method to use with EntityFramework Core.

    Here's the code:

    using Microsoft.EntityFrameworkCore;
    using System.Data.Common;
    
    namespace TerminalInventory
    {
        public static class ExtensionMethods
        {
            public static bool TestConnection(this DbContext context)
            {
                DbConnection conn = context.Database.GetDbConnection();
    
                try
                {
                    conn.Open();   // Check the database connection
    
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }
    }
    

    Now you just have to call:

    if (!context.TestConnection())
    {
        logger.LogInformation("No database connection. Check the connection string in settings.json. {0}", configuration["connectionString"]);
    
        return;
    }
    
    0 讨论(0)
  • 2020-12-08 05:08

    Are you just wanting to see if the DB connection is valid? If so take a look at the

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

    http://msdn.microsoft.com/en-us/library/gg696617(v=vs.103).aspx

    and for checking if a server machine is up, DB server or web services server , try this:

    public PingReply Send( string hostNameOrAddress )

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

    0 讨论(0)
提交回复
热议问题