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

问题描述 投票:4回答:2

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

database-connection entity-framework-core core exists
2个回答
6
投票

目前(直到EF Core 2.0的最新版本)DatabaseFacade类(这是DbContext.Database属性的类型)不公开Exists方法。

但是,相应的EF6方法由EF Core IRelationalDatabaseCreator服务提供。您可以使用自定义扩展方法公开它,如下所示:

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方法从不打算检查数据库连接,而是检查是否需要创建数据库(在调用EnsureCreatedMigrate等方法时在内部使用)。


0
投票

“Exists()”方法仅检查数据库是否存在,它并不真正检查您的应用程序是否可以连接到数据库。例如:如果连接字符串中的密码错误,则Exists()方法将返回true。因此,根据我的说法,更好的解决方案是打开连接并检查是否发生任何异常。

        try
        {
             dbContext.Database.OpenConnection();
             dbContext.Database.CloseConnection();
             return true;
        }
        catch (Exception ex)
        {
            return false;
        }

但如果您仍想使用Exists(),那么您可以这样使用

dbContext.Database.GetService<IRelationalDatabaseCreator>().Exists();
© www.soinside.com 2019 - 2024. All rights reserved.