Ошибка подключения к Aurora во время обновления Entity Framework Core DB

Я пытаюсь запустить команду CLI dotnet ef database update для своего кластера AWS Aurora MySql RDS. Просто для целей тестирования я жестко закодировал строку подключения, чтобы исключить загрузку конфигурации.

Когда я запускаю команду update, мне выдается следующая ошибка:

Произошла ошибка при подключении к базе данных '' на сервере 'some-rds-cluster.abcdefg.us-east-2.rds.amazonaws.com'.

MySql.Data.MySqlClient.MySqlException (0x80004005): доступ запрещен для пользователя «bobby» @ «555.555.555.555» (с использованием пароля: YES)

в MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken CancellationToken) в C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:строка 333

Мой метод ConfigureServices выглядит так:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();

    services.AddDbContextPool<AccountContext>(options =>
    {
        options.UseMySql("server=a-random-cluster.foobar.us-east-2.rds.amazonaws.com;database=SomeDbHere;user=abcdefg;password=abcdefg", contextOptionsBuilder =>
        {
            contextOptionsBuilder.ServerVersion(new Version(5, 7, 12), ServerType.MySql);
        });
    });

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

Я могу подключиться к кластеру с помощью MySql Workbench на моей локальной машине; команда update CLI с того же компьютера не работает. Группа безопасности, подключенная к RDS, разрешает подключение трафика с моего IP-адреса (поэтому MySql Workbench подключается). Есть ли что-то конкретное с EF Core и Pomelo.EntityFrameworkCore.MySql, которое мне нужно сделать, чтобы интерфейс командной строки обновил таблицы? Поддерживает ли Aurora действия, необходимые EF Core для обновления модели данных, например использование другого номера порта по какой-либо причине?

Я заметил ошибку, связанную с использованием соединения с базой данных, и я не могу сказать, намеренно ли она оставила имя базы данных пустым или это часть проблемы. Однако БД указана в строке миграции и подключения, поэтому я предполагаю, что они не указывают имя БД, поскольку в MySql это не БД, а скорее схема.

Я использую aspnetcore 2.1.0 и EF core 2.1.0.

Я сгенерировал миграции из своих сущностей и контекстов, которые приведены ниже.

public partial class InitialMigration : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.EnsureSchema(
            name: "SomeDbHere");

        migrationBuilder.CreateTable(
            name: "Users",
            schema: "SomeDbHere",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation(
                         "MySql:ValueGenerationStrategy",
                          MySqlValueGenerationStrategy.IdentityColumn),
                Username = table.Column<string>(nullable: true),
                CognitoId = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Users", x => x.Id);
            });
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Users",
            schema: "SomeDbHere");
    }
}

person Johnathon Sullinger    schedule 15.07.2018    source источник


Ответы (2)


Похоже на проблему с подключением. Мне удалось подключиться и запустить миграцию в новом проекте. Взгляните на этот проект https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql и прочитайте код в test/EFCore.MySql.IntegrationTests.

person Raymond Sanchez    schedule 09.09.2018
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person Jeroen Heier; 09.09.2018

У меня была такая же проблема, потому что пароль БД содержал символ «$».

Таким образом, когда я сделал export MY_DB_ENV="Server=localhost;Database=my_db;Uid=root;Pwd=pass_with_$abc", $abc был удален из пароля и не мог подключиться.

Вы можете уточнить у echo $MY_DB_ENV, если это так.

person Guillermo    schedule 20.01.2020