Pomelo.entityframeworkcore.mysql: كيفية الحصول على جميع أسماء الجداول باستخدام Pomelo.EntityFrameworkCore.MySql؟

تم إنشاؤها على ٢٤ ديسمبر ٢٠٢٠  ·  4تعليقات  ·  مصدر: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

أريد التحقق من وجود جدول ، فكيف أحصل على جميع أسماء الجداول؟

استخدم CreateCommand () للقيام باستعلام مخصص؟

closed-question type-question

التعليق الأكثر فائدة

عذرًا ، ربما لا أستطيع ، لدي حد للأسئلة في Stack Overflow. - الكثير من الأسئلة الشخصية ...

Flithor في هذه الحالة ، إليك نموذج الشفرة الموعود به:

ج #
باستخدام النظام ؛
باستخدام System.Collections.Generic ؛
باستخدام System.Diagnostics ؛
باستخدام Microsoft.EntityFrameworkCore ؛
باستخدام Microsoft.Extensions.Logging ؛
باستخدام Pomelo.EntityFrameworkCore.MySql.Infrastructure ؛

مشكلة مساحة الاسم ConsoleTemplate
{
IceCream من الدرجة العامة
{
عامة int IceCreamId {get؛ جلس؛ }
اسم السلسلة العامة {get؛ جلس؛ }
}

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`

من INFORMATION_SCHEMA . TABLES
حيث TABLE_SCHEMA = database ()؛ "؛

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
""

ال 4 كومينتر

نعم استعلام مخصص مثل SHOW TABLES; سيعمل. يرجى طرح هذا السؤال على Stack Overflow للحصول على مزيد من المساعدة لأن المشكلات ليست مخصصة لهذا الغرض.

Flithor سأجيب عليك ببعض التعليمات البرمجية على Stack Overflow ، بمجرد نشر سؤالك هناك. الرجاء استخدام علامة pomelo-entityframeworkcore-mysql ، لذلك سيتم إخطاري (إنه سؤال متعلق بـ MySQL و EF Core ، قريب جدًا بدرجة كافية)

عذرًا ، ربما لا أستطيع ، لدي حد للأسئلة في Stack Overflow. - الكثير من الأسئلة الشخصية ...
(سأقوم بتحرير العنوان لمساعدة الآخرين)

عذرًا ، ربما لا أستطيع ، لدي حد للأسئلة في Stack Overflow. - الكثير من الأسئلة الشخصية ...

Flithor في هذه الحالة ، إليك نموذج الشفرة الموعود به:

ج #
باستخدام النظام ؛
باستخدام System.Collections.Generic ؛
باستخدام System.Diagnostics ؛
باستخدام Microsoft.EntityFrameworkCore ؛
باستخدام Microsoft.Extensions.Logging ؛
باستخدام Pomelo.EntityFrameworkCore.MySql.Infrastructure ؛

مشكلة مساحة الاسم ConsoleTemplate
{
IceCream من الدرجة العامة
{
عامة int IceCreamId {get؛ جلس؛ }
اسم السلسلة العامة {get؛ جلس؛ }
}

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`

من INFORMATION_SCHEMA . TABLES
حيث TABLE_SCHEMA = database ()؛ "؛

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
""

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات