При обновлении БД (MSSQL) возникает ошибка “There is already an object named 'Weapons' in the database.”

163
29 апреля 2019, 05:20

При запуске команды update-database происходит ошибка:

There is already an object named 'Weapons' in the database.

Есть несколько моделей EF Core (упрощенная структура):

abstract class Weapon {
   public int    Id   { get; set; }
   public string Name { get; set; }
}
class Axe : Weapon {
}
class Sword : Weapon {
}
class GameDbContext : DbContext {
    public DbSet<Weapon>   Weapons   { get; set; }
    public GameDbContext(DbContextOptions options) : base(options){
        this.Database.EnsureCreated();
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder) {
         base.OnModelCreating(modelBuilder);
         this.SetModelsConfigurations(modelBuilder);
         modelBuilder.Entity<Axe>  ().HasBaseType<Weapon>();
         modelBuilder.Entity<Sword>().HasBaseType<Weapon>();
    }
}

Команда - "add-migration Init" для приведенных моделей выполняется нормально, без ошибок. Но при запуске команды update-database происходит ошибка:

There is already an object named 'Weapons' in the database.

Почему происходит данная ошибка? Какие настройки БД нужно выполнить/удалить/добавить, что бы заставить код работать?

Answer 1

Согласно документации DatabaseFacade.EnsureCreated

Note that this API does not use migrations to create the database. In addition, the database that is created cannot be later updated using migrations. If you are targeting a relational database and using migrations, you can use the DbContext.Database.Migrate() method to ensure the database is created and all migrations are applied.

Вольный перевод

Данное API не использует миграции для создания БД. Кроме того, созданная таким образом БД уже не может быть обновлена при помощи миграций. Если вам нужна реляционная БД и вы используете миграции, вы можете использовать DbContext.Database.Migrate() для того чтобы убедиться, что БД создана и все необходимые миграции применены.

READ ALSO
Перевести sql запрос в Laravel с помощью Eloquent ORM или Query Builder

Перевести sql запрос в Laravel с помощью Eloquent ORM или Query Builder

Есть 3 таблицы (CAT_OBL, CAT_STATION, TOS_MES), 1-я и 2-я связаны между собой по полю OBL_ID, 2-я и 3-я таблицы связанны по полю IND_STНужно вывести данные из 3-й таблицы...

164
Как установить эти модули через ispmanager?

Как установить эти модули через ispmanager?

Подскажите, как в панели (5 версия) установить gmpobject, strlen, sprintf, ip2long, serialize, unserialize, crypt, parse_str, json_encode, strtr, strstr, round, parse_url, simplexml_load_string, array_search ? Есть...

143
(решено) почему не передаются перменные в функцию array_map php?

(решено) почему не передаются перменные в функцию array_map php?

Есть срочки в коде (читайте комментарии в коде):

181
Как создать одноразовую ссылку? [закрыт]

Как создать одноразовую ссылку? [закрыт]

Необходимо создать ссылку для клиента, которая будет не активна после захода на неё

201