Ste*_*ood 33 c# mysql testing entity-framework database-connection
我有一个通过实体框架连接到MYSQL数据库的应用程序.它100%完美地工作,但我想添加一小段代码,在app启动时测试与数据库的连接.
我只想简单地向数据库运行一个小命令并捕获任何异常,但是如果出现问题(例如App.Config缺失或数据库服务器关闭),应用程序需要花费大量时间来运行此代码然后抛出例外(约1分钟).我想这是由于连接超时等,但我摆弄这些属性无济于事.
是否有人能够协助任何想法去哪儿?
Tau*_*eef 43
您只是想查看数据库连接是否有效.如果有的话,看看
using (DatabaseContext dbContext = new DatabaseContext())
{
dbContext.Database.Exists();
}
Run Code Online (Sandbox Code Playgroud)
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
San*_*dor 33
@Danilo Breda指出的解决方案是调用DbContext.Database.Connection.Open()
它使用EF6进行测试.
我的实施:
public static bool CheckConnection()
{
try
{
MyContext.Database.Connection.Open();
MyContext.Database.Connection.Close();
}
catch(SqlException)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*eda 10
我将这段代码用于我的项目:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但这是我对任何寻求新实现的人的回答。
我能够用来CanConnect
检查数据库的状态:
_database.Database.CanConnect();
# Async too
await _database.Database.CanConnectAsync(_cancellationTokenSource.Token);
Run Code Online (Sandbox Code Playgroud)
我希望这也对其他人有帮助。干杯!
在EntityFramework Core中,您可以简单地调用:Database.CanConnect();
。
(使用EF Core 2.2.1)