如何在Entity Framework Core中检查与数据库的连接?

Har*_*rji 4 database-connection exists core entity-framework-core

在普通实体框架中,我能够使用dbContext.Database.Exists()检查数据库连接,但在Entity Framework Core中它不存在.实体框架核心中dbContext.Database.Exists()的替代方法是什么?

nmu*_*mur 10

您可以通过以下方法确定数据库是否可用以及是否可以连接CanConnect()

if (dbContext.Database.CanConnect())
{
    // all good
}
Run Code Online (Sandbox Code Playgroud)

您可以CanConnectAsync()用于异步操作。

  • 如果您的服务器处于离线状态,CanConnect() 会抛出异常,它并不总是返回 true/false。大家注意到这一点了吗? (2认同)

Iva*_*oev 6

目前(直到最新的EF Core 2.0)DatabaseFacade该类(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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但请注意,Exists方法绝不是用来检查数据库连接,但不是检查数据库需要创建(内部使用,当你调用类似的方法EnsureCreated,Migrate等等).

  • 您认为什么是测试数据库运行状况的好方法?我正在尝试在负载均衡器运行状况检查中实施一项。 (2认同)