Pomelo.entityframeworkcore.mysql: Wie bekomme ich alle Tabellennamen mit Pomelo.EntityFrameworkCore.MySql?

Erstellt am 24. Dez. 2020  ·  4Kommentare  ·  Quelle: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Ich möchte überprüfen, ob eine Tabelle existiert. Wie bekomme ich alle Tabellennamen?

Verwenden Sie CreateCommand(), um eine benutzerdefinierte Abfrage durchzuführen?

closed-question type-question

Hilfreichster Kommentar

Oh oh, vielleicht kann ich nicht, ich habe ein Fragelimit für Stack Overflow. - Zu viel persönliche Frage...

@Flithor In diesem Fall ist hier der versprochene Beispielcode:

```c#
Verwenden des Systems;
mit System.Collections.Generic;
Verwenden von System.Diagnostics;
unter Verwendung von Microsoft.EntityFrameworkCore;
Verwenden von Microsoft.Extensions.Logging;
Verwenden von Pomelo.EntityFrameworkCore.MySql.Infrastructure;

Namespace IssueConsoleTemplate
{
öffentliche Klasse IceCream
{
public int IceCreamId { get; einstellen; }
öffentliche Zeichenfolge Name { get; einstellen; }
}

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`

ab INFORMATION_SCHEMA . TABLES
wobei TABLE_SCHEMA = Datenbank();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

Alle 4 Kommentare

Ja, eine benutzerdefinierte Abfrage wie SHOW TABLES; würde funktionieren. Bitte stellen Sie diese Frage auf Stack Overflow, um weitere Hilfe zu erhalten, da Probleme nicht für diesen Zweck bestimmt sind.

@Flithor Ich antworte Ihnen mit Beispielcode auf Stack Overflow, sobald Sie Ihre Frage dort gepostet haben. Bitte verwenden Sie das Tag pomelo-entityframeworkcore-mysql , damit ich benachrichtigt werde (es ist eine Frage zu MySQL und EF Core, also nahe genug).

Oh oh, vielleicht kann ich nicht, ich habe ein Fragelimit für Stack Overflow. - Zu viel persönliche Frage...
(Ich werde den Titel bearbeiten, um anderen zu helfen)

Oh oh, vielleicht kann ich nicht, ich habe ein Fragelimit für Stack Overflow. - Zu viel persönliche Frage...

@Flithor In diesem Fall ist hier der versprochene Beispielcode:

```c#
Verwenden des Systems;
mit System.Collections.Generic;
Verwenden von System.Diagnostics;
unter Verwendung von Microsoft.EntityFrameworkCore;
Verwenden von Microsoft.Extensions.Logging;
Verwenden von Pomelo.EntityFrameworkCore.MySql.Infrastructure;

Namespace IssueConsoleTemplate
{
öffentliche Klasse IceCream
{
public int IceCreamId { get; einstellen; }
öffentliche Zeichenfolge Name { get; einstellen; }
}

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`

ab INFORMATION_SCHEMA . TABLES
wobei TABLE_SCHEMA = Datenbank();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen