Pomelo.entityframeworkcore.mysql: ¿Cómo obtener todos los nombres de las tablas con Pomelo.EntityFrameworkCore.MySql?

Creado en 24 dic. 2020  ·  4Comentarios  ·  Fuente: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Quiero comprobar si existe alguna tabla, entonces, ¿cómo obtener todos los nombres de las tablas?

usar CreateCommand () para hacer una consulta personalizada?

closed-question type-question

Comentario más útil

Uh oh, tal vez no pueda, tengo un límite de preguntas en Stack Overflow. - Demasiada pregunta personal ...

@Flithor En ese caso, aquí está el código de muestra prometido:

`` c #
usando el sistema;
usando System.Collections.Generic;
utilizando System.Diagnostics;
utilizando Microsoft.EntityFrameworkCore;
utilizando Microsoft.Extensions.Logging;
utilizando Pomelo.EntityFrameworkCore.MySql.Infrastructure;

espacio de nombres IssueConsoleTemplate
{
IceCream clase pública
{
public int IceCreamId {obtener; colocar; }
Nombre de cadena pública {get; colocar; }
}

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`

desde INFORMATION_SCHEMA . TABLES
donde TABLE_SCHEMA = base de datos (); ";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
''

Todos 4 comentarios

Sí, una consulta personalizada como SHOW TABLES; funcionaría. Haga esta pregunta en Stack Overflow para obtener más ayuda, ya que los problemas no están pensados ​​para este propósito.

@Flithor Te responderé con un código de muestra en Stack Overflow, una vez que hayas publicado tu pregunta allí. Utilice la etiqueta pomelo-entityframeworkcore-mysql , para que se me notifique (es una pregunta relacionada con MySQL y EF Core, tan cerca).

Uh oh, tal vez no pueda, tengo un límite de preguntas en Stack Overflow. - Demasiada pregunta personal ...
(Editaré el título para ayudar a otros)

Uh oh, tal vez no pueda, tengo un límite de preguntas en Stack Overflow. - Demasiada pregunta personal ...

@Flithor En ese caso, aquí está el código de muestra prometido:

`` c #
usando el sistema;
usando System.Collections.Generic;
utilizando System.Diagnostics;
utilizando Microsoft.EntityFrameworkCore;
utilizando Microsoft.Extensions.Logging;
utilizando Pomelo.EntityFrameworkCore.MySql.Infrastructure;

espacio de nombres IssueConsoleTemplate
{
IceCream clase pública
{
public int IceCreamId {obtener; colocar; }
Nombre de cadena pública {get; colocar; }
}

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`

desde INFORMATION_SCHEMA . TABLES
donde TABLE_SCHEMA = base de datos (); ";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
''

¿Fue útil esta página
0 / 5 - 0 calificaciones