Pomelo.entityframeworkcore.mysql: Pomelo.EntityFrameworkCore.MySql рдХреЗ рд╕рд╛рде рд╕рднреА рдЯреЗрдмрд▓ рдирд╛рдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рджрд┐рд╕ре░ 2020  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

рдореИрдВ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдЯреЗрдмрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╕рднреА рдЯреЗрдмрд▓ рдирд╛рдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CreateCommand() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

closed-question type-question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдУрд╣ рдУрд╣, рд╢рд╛рдпрдж рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдкреНрд░рд╢реНрди рд╕реАрдорд╛ рд╣реИред - рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢реНрди ...

@Flihor рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

```рд╕реА#
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
System.Collections.Generic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
System.Diagnostics рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Microsoft.EntityFrameworkCore рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Microsoft.Extensions.Logging рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Pomelo.EntityFrameworkCore.MySql.Infrastructure рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рдиреЗрдорд╕реНрдкреЗрд╕ рдЗрд╢реНрдпреВрдХрдВрд╕реЛрд▓рдЯреЗрдореНрдкрд▓реЗрдЯ
{
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЖрдЗрд╕рдХреНрд░реАрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int IceCreamId { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
}

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 = рдбреЗрдЯрд╛рдмреЗрд╕ ();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдБ SHOW TABLES; рдЬреИрд╕реА рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реА рдХрд╛рдо рдХрд░реЗрдЧреАред рдХреГрдкрдпрд╛ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рдЖрдЧреЗ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдкреВрдЫреЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЗ рдирд╣реАрдВ рд╣реИрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдкреНрд░рд╢реНрди рд╡рд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд▓реЗрдВрдЧреЗ, рддреЛ @Flihor рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдХреБрдЫ рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ред рдХреГрдкрдпрд╛ pomelo-entityframeworkcore-mysql рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдПрдХ MySQL рдФрд░ EF Core рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИ)ред

рдУрд╣ рдУрд╣, рд╢рд╛рдпрдж рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдкреНрд░рд╢реНрди рд╕реАрдорд╛ рд╣реИред - рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢реНрди ...
(рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реВрдВрдЧрд╛)

рдУрд╣ рдУрд╣, рд╢рд╛рдпрдж рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдкреНрд░рд╢реНрди рд╕реАрдорд╛ рд╣реИред - рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢реНрди ...

@Flihor рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

```рд╕реА#
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
System.Collections.Generic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
System.Diagnostics рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Microsoft.EntityFrameworkCore рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Microsoft.Extensions.Logging рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Pomelo.EntityFrameworkCore.MySql.Infrastructure рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рдиреЗрдорд╕реНрдкреЗрд╕ рдЗрд╢реНрдпреВрдХрдВрд╕реЛрд▓рдЯреЗрдореНрдкрд▓реЗрдЯ
{
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЖрдЗрд╕рдХреНрд░реАрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int IceCreamId { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
}

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 = рдбреЗрдЯрд╛рдмреЗрд╕ ();";

        var tableNames = new List<string>();

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

        return tableNames;
    }
}

}
```

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

hainguyenthanh picture hainguyenthanh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lauxjpn picture lauxjpn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aramirezh-dev picture aramirezh-dev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

coultonluke picture coultonluke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ptsneves picture ptsneves  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ