Π― Ρ ΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ°, ΠΊΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°Π±Π»ΠΈΡ?
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CreateCommand () Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°?
ΠΠ°, ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ SHOW TABLES;
Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π² Stack Overflow Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠΌΠΎΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ.
@Flithor Π― ΠΎΡΠ²Π΅ΡΡ Π²Π°ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΊΠΎΠ΄Π° Π½Π° Stack Overflow, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ°ΠΌ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π³ pomelo-entityframeworkcore-mysql
, ΡΡΠΎΠ±Ρ Ρ Π±ΡΠ» ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ (ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ MySQL ΠΈ EF Core, ΡΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ).
ΠΠΉ, ΠΌΠΎΠΆΠ΅Ρ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°. - Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ...
(Π― ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π΄ΡΡΠ³ΠΈΠΌ)
ΠΠΉ, ΠΌΠΎΠΆΠ΅Ρ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°. - Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ...
@Flithor Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΡ ΠΎΠ±Π΅ΡΠ°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
`` Π‘ #
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π‘ΠΈΡΡΠ΅ΠΌΡ;
using System.Collections.Generic;
Ρ ΠΏΠΎΠΌΠΎΡΡΡ System.Diagnostics;
using Microsoft.EntityFrameworkCore;
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Microsoft.Extensions.Logging;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Pomelo.EntityFrameworkCore.MySql.Infrastructure;
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ IssueConsoleTemplate
{
ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ IceCream
{
public 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
= database (); ";
var tableNames = new List<string>();
using var reader = command.ExecuteReader();
while (reader.Read())
{
tableNames.Add((string) reader["TABLE_NAME"]);
}
return tableNames;
}
}
}
`` ''
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@Flithor Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΡ ΠΎΠ±Π΅ΡΠ°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
`` Π‘ #
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π‘ΠΈΡΡΠ΅ΠΌΡ;
using System.Collections.Generic;
Ρ ΠΏΠΎΠΌΠΎΡΡΡ System.Diagnostics;
using Microsoft.EntityFrameworkCore;
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Microsoft.Extensions.Logging;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Pomelo.EntityFrameworkCore.MySql.Infrastructure;
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ IssueConsoleTemplate
{
ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ IceCream
{
public int IceCreamId {ΠΏΠΎΠ»ΡΡΠΈΡΡ; Π½Π°Π±ΠΎΡ; }
ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΠΌΡ {ΠΏΠΎΠ»ΡΡΠΈΡΡ; Π½Π°Π±ΠΎΡ; }
}
ΠΎΡ
INFORMATION_SCHEMA
.TABLES
Π³Π΄Π΅
TABLE_SCHEMA
= database (); ";}
`` ''