Не работает Update-Database (PostgreSQL) в приложении C# WPF (ЗАКРЫТ)

При выполнении команды Add-Migration [Name] -verbose всё проходит замечательно. Миграция собирается, база создаётся. Сделал правки в моделях, хочу обновить базу командой Update-Database -verbose и выдаёт следующую ошибку:

Failed executing DbCommand (0ms) [Parameters=[], CommandType = 'Text', CommandTimeout = '30']
CREATE TABLE "Roles" (
    "Id" uuid NOT NULL,
    "Name" text NOT NULL,
    CONSTRAINT "PK_Roles" PRIMARY KEY ("Id")
);
Disposing transaction.
'AppDBContext' disposed.
Npgsql.PostgresException (0x80004005): 42P07: отношение "Roles" уже существует
   at Npgsql.Internal.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|215_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
   at Npgsql.NpgsqlDataReader.NextResult()
   at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
  Exception data:
    Severity: ОШИБКА
    SqlState: 42P07
    MessageText: отношение "Roles" уже существует
    File: heap.c
    Line: 1202
    Routine: heap_create_with_catalog
42P07: отношение "Roles" уже существует

Нашёл что-то подобное в англоязычном сегменте стэка, но так и не понял, как исправить это.

Классы объектов:

User

public class User
{
    // Код пользователя
    [Required]
    [Key]
    public Guid Id { get; set; } = Guid.NewGuid();

    // Роль пользователя
    [Required]
    [ConcurrencyCheck]
    public Guid? RoleId { get; set; }
    [ForeignKey("RoleId")]
    public Role Role { get; set; }


    // Изображение пользователя
    [ConcurrencyCheck]
    public byte[]? UserPic { get; set; }

    // Имя пользователя
    [Required]
    [ConcurrencyCheck]
    public string FirstName { get; set; }

    // Отчество пользователя
    [ConcurrencyCheck]
    public string? MiddleName { get; set; }

    // Фамилия пользователя
    [ConcurrencyCheck]
    [Required]
    public string LastName { get; set; }

    // Телефонный номер пользователя
    [ConcurrencyCheck]
    [Required]
    public string PhoneNumber { get; set; }

    // Электронная почта пользователя
    [ConcurrencyCheck]
    [Required]
    public string Email { get; set; }

    // Адрес пользователя
    public string? Address { get; set; }

    // Пароль пользователя
    [ConcurrencyCheck]
    [Required]
    public string Password { get; set; }

    //Активирован ли аккаунт
    [ConcurrencyCheck]
    [Required]
    public bool IsActivated { get; set; }
}

Role

public class Role
{
    // Код роли
    [Required]
    [Key]
    public Guid Id { get; set; } = Guid.NewGuid();

    // Название роли
    [Required]
    public string Name { get; set; }
}

AppDBContext

public class AppDBContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }

    public AppDBContext()
    {
        Database.EnsureCreated();

        if (this.Users.Count() == 0 && this.Roles.Count() == 0)
        {
            Role adminRole = new Role() { Name = "Администратор" };
            this.Roles.Add(adminRole);
            User adminUser = new User() {
                FirstName = [data],
                MiddleName = [data],
                LastName = [data],
                Role = adminRole,
                Email = [data],
                PhoneNumber = [data],
                Password = [data],
                IsActivated = true
            };
            this.Users.Add(adminUser);
            this.SaveChanges();
        }
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string _currentDBHost = RegistryService.GetRegistryKeySettings("DBHost");
        string _currentDBPort = RegistryService.GetRegistryKeySettings("DBPort");
        string _currentDBName = RegistryService.GetRegistryKeySettings("DBName");
        string _currentDBUser = RegistryService.GetRegistryKeySettings("DBUser");
        string _currentDBPassword = RegistryService.GetRegistryKeySettings("DBPassword");
        optionsBuilder.UseNpgsql($"Host={_currentDBHost};Port={_currentDBPort};Database={_currentDBName};Username={_currentDBUser};Password={_currentDBPassword}");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().Property(u => u.IsActivated).HasDefaultValue(false);
    }
}

UPD:

Поменял на Serial, как советовали в похожем посте - не помогло Поменял на Serial, как советовали в похожем посте - не помогло


Ответы (0 шт):