代码之家  ›  专栏  ›  技术社区  ›  Harsh darji

如何检查实体框架核心中与数据库的连接?

  •  7
  • Harsh darji  · 技术社区  · 7 年前

    dbContext.Database.Exists() 但在实体框架核心中,它并不存在。替代方案是什么 dbContext。数据库存在() 实体框架核心?

    3 回复  |  直到 3 年前
        1
  •  15
  •   nmur    5 年前

    CanConnect() 方法:

    if (dbContext.Database.CanConnect())
    {
        // all good
    }
    

    CanConnectAsync() 用于异步操作。

        2
  •  6
  •   Ivan Stoev    7 年前

    DatabaseFacade 类(这是 DbContext.Database 不公开 Exists 方法

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

    但请注意 存在 EnsureCreated , Migrate

        3
  •  1
  •   Manvinder Singh    5 年前

    “Exists()”方法只检查数据库是否存在,而不是真正检查应用程序是否可以连接到数据库。例如:如果连接字符串中的密码错误,那么Exists()方法将返回true。

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

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

    dbContext.Database.GetService<IRelationalDatabaseCreator>().Exists();