Pomelo.entityframeworkcore.mysql: Comment obtenir tous les noms de table avec Pomelo.EntityFrameworkCore.MySql ?

Créé le 24 déc. 2020  ·  4Commentaires  ·  Source: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Je veux vérifier qu'une table existe, alors comment obtenir tous les noms de table ?

utiliser CreateCommand() pour faire une requête personnalisée ?

closed-question type-question

Commentaire le plus utile

Euh oh, peut-être que je ne peux pas, j'ai une limite de questions sur Stack Overflow. - Trop de question personnelle...

@Flithor Dans ce cas, voici l'exemple de code promis :

```c#
en utilisant le système ;
en utilisant System.Collections.Generic ;
en utilisant System.Diagnostics;
en utilisant Microsoft.EntityFrameworkCore ;
en utilisant Microsoft.Extensions.Logging ;
en utilisant Pomelo.EntityFrameworkCore.MySql.Infrastructure ;

espace de noms IssueConsoleTemplate
{
Glace en classe publique
{
public int IceCreamId { get; ensemble; }
chaîne publique Nom { get; ensemble; }
}

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`

à partir de INFORMATION_SCHEMA . TABLES
TABLE_SCHEMA = base de données();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

Tous les 4 commentaires

Oui, une requête personnalisée comme SHOW TABLES; fonctionnerait. Veuillez poser cette question sur Stack Overflow pour obtenir de l'aide, car les problèmes ne sont pas destinés à cet effet.

@Flithor Je vous répondrai avec un exemple de code sur Stack Overflow, une fois que vous aurez posté votre question là-bas. Veuillez utiliser la balise pomelo-entityframeworkcore-mysql , donc je serai averti (c'est une question liée à MySQL et EF Core, donc assez proche).

Euh oh, peut-être que je ne peux pas, j'ai une limite de questions sur Stack Overflow. - Trop de question personnelle...
(Je vais modifier le titre pour aider les autres)

Euh oh, peut-être que je ne peux pas, j'ai une limite de questions sur Stack Overflow. - Trop de question personnelle...

@Flithor Dans ce cas, voici l'exemple de code promis :

```c#
en utilisant le système ;
en utilisant System.Collections.Generic ;
en utilisant System.Diagnostics;
en utilisant Microsoft.EntityFrameworkCore ;
en utilisant Microsoft.Extensions.Logging ;
en utilisant Pomelo.EntityFrameworkCore.MySql.Infrastructure ;

espace de noms IssueConsoleTemplate
{
Glace en classe publique
{
public int IceCreamId { get; ensemble; }
chaîne publique Nom { get; ensemble; }
}

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`

à partir de INFORMATION_SCHEMA . TABLES
TABLE_SCHEMA = base de données();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

Cette page vous a été utile?
0 / 5 - 0 notes