【问题标题】:ASP.NET EntityFramework get database nameASP.NET EntityFramework 获取数据库名称
【发布时间】:2015-10-08 22:04:26
【问题描述】:

我使用以下教程使用 MySQL 创建了一个 ASP.NET EF 应用程序:http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider 它可以工作,但我不喜欢在 MySqlInitializer 类中设置硬编码的数据库名称 - 称为 myDatabaseName 在下面的 sn-p 中:

var migrationHistoryTableExists = ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
        string.Format(
          "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
          "myDatabaseName"));

我正在寻找一种从 DbContext 动态获取数据库名称的方法,以便将数据库名称仅存储在连接字符串中,而不是第二次存储在 MySqlInitializer 中。但是我在 DbContext 和 DbContext 的数据库属性中都找不到该名称的任何属性。

【问题讨论】:

    标签: c# mysql .net entity-framework .net-core


    【解决方案1】:

    对于那些使用 EF 核心的人,可以这样做:

    var databaseName = context.Database.GetDbConnection().Database
    

    【讨论】:

    • GetDbConnection() in 2.0
    • @John 他们又更新了吗?
    • 这不是 EF Core 5.0 的最新版本
    • 我从未使用过以前的版本,所以我无法真正进行有效比较,但DbContext.Database 属性的类型为DatabaseFacade,它不包含方法GetDbConnection()。 SQL 连接现在使用DbContextOptionsBuilder 在受保护的OnConfiguring 方法中定义。但是,在 DbContext 类之外似乎无法访问此 optionsBuilder。
    • @DMXDavidCardinal 它不包含该方法,因为它是扩展方法。见MSDN Documentation
    【解决方案2】:

    这应该为您完成这项工作

    string databaseName = context.Database.Connection.Database;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多