Невозможно обновить базу данных для основной миграции EF - PullRequest
0 голосов
/ 21 сентября 2018

Я добавил очень незначительную миграцию в свой проект.Он просто меняет тип данных пары столбцов на decimal(5,2).Команда Add Migration создает класс миграции.Однако команда Update-Database вызывает исключение.

Кроме того, Remove-Migration выдает то же исключение:

Возникло исключение, которое, вероятно, связано с временным отказом.Если вы подключаетесь к базе данных SQL Azure, рассмотрите возможность использования SqlAzureExecutionStrategy.

Я использую локальную базу данных SQL Server 2014.Моя строка подключения для целей разработки очень проста:

"DbConnectionString": "Server=.;Database=DBNAME;Trusted_Connection=True;MultipleActiveResultSets=true"

Она хранится в файле config.json.Я использую самую последнюю версию Visual Studio VS VS 15.8.5.

Я обновил веб-проект до .NET Core 2.1, а затем в Nuget обновил до последней стабильной версии 2.1.4.Это вызвало изменение в сообщении об ошибке, которое теперь выглядит так:

Возникла исключительная ситуация, которая, вероятно, вызвана временным сбоем.Подумайте о включении устойчивости к временным ошибкам, добавив EnableRetryOnFailure() к вызову UseSqlServer.

Я пошел в свой класс запуска и добавил это свойство EnableRetryOnFailure, хотя сомневаюсь, что это кореньэта проблема.

services.AddDbContextPool<AppDbContext>(options => options.UseSqlServer(_configuration.GetConnectionString("DbConnectionString"), builder =>
        {
            builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
        }));

Сгенерированный класс миграции:

public partial class v50 : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<decimal>(
            name: "LnRrSncsm",
            table: "Jobs",
            type: "decimal(5, 2)",
            nullable: false,
            oldClrType: typeof(float));

        migrationBuilder.AlterColumn<decimal>(
            name: "LnRrQsnqcsm",
            table: "Jobs",
            type: "decimal(5, 2)",
            nullable: false,
            oldClrType: typeof(float));
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<float>(
            name: "LnRrSncsm",
            table: "Jobs",
            nullable: false,
            oldClrType: typeof(decimal),
            oldType: "decimal(5, 2)");

        migrationBuilder.AlterColumn<float>(
            name: "LnRrQsnqcsm",
            table: "Jobs",
            nullable: false,
            oldClrType: typeof(decimal),
            oldType: "decimal(5, 2)");
    }
}

1 Ответ

0 голосов
/ 24 сентября 2018

Хорошо, проблема в том, что строка соединения жестко запрограммирована в AppDbContextFactory.Решение состоит в том, чтобы вместо этого использовать конфигурацию.

public AppDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
        optionsBuilder.UseSqlServer(Configuration.GetConnectionString("DbConnectionString"), opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(10).TotalSeconds));

        return new AppDbContext(optionsBuilder.Options);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...