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 ?
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
où 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;
}
}
}
```
Commentaire le plus utile
@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; }
}
à partir de
INFORMATION_SCHEMA
.TABLES
où
TABLE_SCHEMA
= base de données();";}
```