Pomelo.entityframeworkcore.mysql: Pomelo.EntityFrameworkCore.MySqlですべてのテーブル名を取得するにはどうすればよいですか?

作成日 2020年12月24日  ·  4コメント  ·  ソース: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

いくつかのテーブルが存在することを確認したいのですが、すべてのテーブル名を取得するにはどうすればよいですか?

CreateCommand()を使用してカスタムクエリを実行しますか?

closed-question type-question

最も参考になるコメント

ええと、多分私はできません、私はスタックオーバーフローに質問制限があります。 -個人的な質問が多すぎます...

@Flithorその場合、約束されたサンプルコードは次のとおりです。

`` `c#
システムを使用する;
System.Collections.Genericを使用する;
System.Diagnosticsを使用します。
Microsoft.EntityFrameworkCoreを使用します。
Microsoft.Extensions.Loggingを使用する;
Pomelo.EntityFrameworkCore.MySql.Infrastructureを使用します。

名前空間IssueConsoleTemplate
{{
パブリッククラスのアイスクリーム
{{
public int IceCreamId {get; セットする; }
パブリック文字列名前{取得; セットする; }
}

public class Context : DbContext
{
    public DbSet<IceCream> IceCreams { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseMySql(
                "server=127.0.0.1;port=3306;user=root;password=;database=Issue1279",
                b => b.ServerVersion("8.0.21-mysql")
                      .CharSetBehavior(CharSetBehavior.NeverAppend))
            .UseLoggerFactory(
                LoggerFactory.Create(
                    b => b.AddConsole()
                        .AddFilter(level => level >= LogLevel.Information)))
            .EnableSensitiveDataLogging()
            .EnableDetailedErrors();
    }
}

internal static class Program
{
    private static void Main()
    {
        using var context = new Context();

        context.Database.EnsureDeleted();
        context.Database.EnsureCreated();

        var tableNames = GetTableNames(context);

        Trace.Assert(tableNames.Contains("IceCreams"));
    }

    private static List<string> GetTableNames(DbContext context)
    {
        // EF Core will close the connection automatically for us, when we ensure, that it is EF Core itself that is
        // responsible for opening the database connection. We can ensure that by calling `OpenConnection()` first.
        context.Database.OpenConnection();

        var connection = context.Database.GetDbConnection();

        using var command = connection.CreateCommand();
        command.CommandText = @"select `TABLE_NAME`

INFORMATION_SCHEMATABLES
ここで、 TABLE_SCHEMA = database(); ";

        var tableNames = new List<string>();

        using var reader = command.ExecuteReader();
        while (reader.Read())
        {
            tableNames.Add((string) reader["TABLE_NAME"]);
        }

        return tableNames;
    }
}

}
`` `

全てのコメント4件

はい、 SHOW TABLES;ようなカスタムクエリは機能します。 問題はこの目的を意図したものではないため、さらにヘルプが必要な場合は、 StackOverflowでこの質問をしてください。

@Flithor質問を投稿したら、 pomelo-entityframeworkcore-mysqlタグを使用してください。通知されます(MySQLおよびEF Core関連の質問なので、十分に近いです)。

ええと、多分私はできません、私はスタックオーバーフローに質問制限があります。 -個人的な質問が多すぎます...
(他の人を助けるためにタイトルを編集します)

ええと、多分私はできません、私はスタックオーバーフローに質問制限があります。 -個人的な質問が多すぎます...

@Flithorその場合、約束されたサンプルコードは次のとおりです。

`` `c#
システムを使用する;
System.Collections.Genericを使用する;
System.Diagnosticsを使用します。
Microsoft.EntityFrameworkCoreを使用します。
Microsoft.Extensions.Loggingを使用する;
Pomelo.EntityFrameworkCore.MySql.Infrastructureを使用します。

名前空間IssueConsoleTemplate
{{
パブリッククラスのアイスクリーム
{{
public int IceCreamId {get; セットする; }
パブリック文字列名前{取得; セットする; }
}

public class Context : DbContext
{
    public DbSet<IceCream> IceCreams { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .UseMySql(
                "server=127.0.0.1;port=3306;user=root;password=;database=Issue1279",
                b => b.ServerVersion("8.0.21-mysql")
                      .CharSetBehavior(CharSetBehavior.NeverAppend))
            .UseLoggerFactory(
                LoggerFactory.Create(
                    b => b.AddConsole()
                        .AddFilter(level => level >= LogLevel.Information)))
            .EnableSensitiveDataLogging()
            .EnableDetailedErrors();
    }
}

internal static class Program
{
    private static void Main()
    {
        using var context = new Context();

        context.Database.EnsureDeleted();
        context.Database.EnsureCreated();

        var tableNames = GetTableNames(context);

        Trace.Assert(tableNames.Contains("IceCreams"));
    }

    private static List<string> GetTableNames(DbContext context)
    {
        // EF Core will close the connection automatically for us, when we ensure, that it is EF Core itself that is
        // responsible for opening the database connection. We can ensure that by calling `OpenConnection()` first.
        context.Database.OpenConnection();

        var connection = context.Database.GetDbConnection();

        using var command = connection.CreateCommand();
        command.CommandText = @"select `TABLE_NAME`

INFORMATION_SCHEMATABLES
ここで、 TABLE_SCHEMA = database(); ";

        var tableNames = new List<string>();

        using var reader = command.ExecuteReader();
        while (reader.Read())
        {
            tableNames.Add((string) reader["TABLE_NAME"]);
        }

        return tableNames;
    }
}

}
`` `

このページは役に立ちましたか?
0 / 5 - 0 評価