Quiero comprobar si existe alguna tabla, entonces, ¿cómo obtener todos los nombres de las tablas?
usar CreateCommand () para hacer una consulta personalizada?
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;
}
}
}
''
Comentario más útil
@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; }
}
desde
INFORMATION_SCHEMA
.TABLES
donde
TABLE_SCHEMA
= base de datos (); ";}
''