如何检查 Entity Framework Core 中与数据库的连接?
How to check connection to database in Entity Framework Core?
在正常情况下 entity framework 我可以使用 dbContext.Database.Exists()
检查数据库连接,但在 Entity Framework Core 中它不存在。 Entity Framework Core 中 dbContext.Database.Exists()
的替代项是什么?
目前(目前最新的EF Core 2.0)DatabaseFacade
class(即DbContext.Database
属性的类型)不暴露公开 Exists
方法。
但是,EF Core IRelationalDatabaseCreator
服务提供了对应的 EF6 方法的等价物。您可以使用这样的自定义扩展方法公开它:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
public static class DatabaseFacadeExtensions
{
public static bool Exists(this DatabaseFacade source)
{
return source.GetService<IRelationalDatabaseCreator>().Exists();
}
}
但请注意,Exists
方法从未打算检查数据库连接,而是检查是否需要创建数据库(在调用 EnsureCreated
等方法时内部使用), Migrate
等等)。
"Exists()"方法只检查数据库是否存在,并没有真正检查您的应用程序是否可以连接到数据库。例如:即使连接字符串中的密码错误,Exists() 方法也会 return 为真。
所以根据我的说法,更好的解决方案是打开连接并检查其中是否发生任何异常。
try
{
dbContext.Database.OpenConnection();
dbContext.Database.CloseConnection();
return true;
}
catch (Exception ex)
{
return false;
}
但是如果你仍然想使用 Exists() 那么你可以这样使用
dbContext.Database.GetService<IRelationalDatabaseCreator>().Exists();
您可以使用CanConnect()
方法确定数据库是否可用以及是否可以连接:
if (dbContext.Database.CanConnect())
{
// all good
}
您可以使用 CanConnectAsync()
进行异步操作。
在正常情况下 entity framework 我可以使用 dbContext.Database.Exists()
检查数据库连接,但在 Entity Framework Core 中它不存在。 Entity Framework Core 中 dbContext.Database.Exists()
的替代项是什么?
目前(目前最新的EF Core 2.0)DatabaseFacade
class(即DbContext.Database
属性的类型)不暴露公开 Exists
方法。
但是,EF Core IRelationalDatabaseCreator
服务提供了对应的 EF6 方法的等价物。您可以使用这样的自定义扩展方法公开它:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
public static class DatabaseFacadeExtensions
{
public static bool Exists(this DatabaseFacade source)
{
return source.GetService<IRelationalDatabaseCreator>().Exists();
}
}
但请注意,Exists
方法从未打算检查数据库连接,而是检查是否需要创建数据库(在调用 EnsureCreated
等方法时内部使用), Migrate
等等)。
"Exists()"方法只检查数据库是否存在,并没有真正检查您的应用程序是否可以连接到数据库。例如:即使连接字符串中的密码错误,Exists() 方法也会 return 为真。 所以根据我的说法,更好的解决方案是打开连接并检查其中是否发生任何异常。
try
{
dbContext.Database.OpenConnection();
dbContext.Database.CloseConnection();
return true;
}
catch (Exception ex)
{
return false;
}
但是如果你仍然想使用 Exists() 那么你可以这样使用
dbContext.Database.GetService<IRelationalDatabaseCreator>().Exists();
您可以使用CanConnect()
方法确定数据库是否可用以及是否可以连接:
if (dbContext.Database.CanConnect())
{
// all good
}
您可以使用 CanConnectAsync()
进行异步操作。