测试entity framework数据库连接

我有一个通过entity framework连接到MYSQL数据库的应用程序。 它100%完美地工作,但我想添加一小段代码,在app启动时测试与数据库的连接。

我只想简单地向数据库运行一个小命令并捕获任何exception,但是如果出现问题(例如App.Config丢失或数据库服务器关闭),应用程序需要花费大量时间来运行此代码然后抛出例外(约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 for EF6

并且要检查服务器计算机是否已启动,数据库服务器或Web服务服务器,请尝试以下操作:

public PingReply Send( string hostNameOrAddress )

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

@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; } 

我将这段代码用于我的项目:

 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; } } } 

我使用了@Sandor的答案,并使用了扩展方法与EntityFramework Core一起使用。

这是代码:

 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; } } } } 

现在你只需要打电话:

 if (!context.TestConnection()) { logger.LogInformation("No database connection. Check the connection string in settings.json. {0}", configuration["connectionString"]); return; }