context.Database.Migrate()
само по себе не создает миграции .Вместо этого он обрабатывает созданные вами миграции.
Для каждого изменения базы данных вы должны вызывать Add-Migration {sensibleName}
.
Ваш класс запуска продолжит вызывать context.Database.Migrate()
, который проверит вашу базу данных и обработает любуюожидающие миграции.
Например, после того, как вы создали свою базу данных, общим правилом является вызов Add-Migration Initial
.Вызов context.Database.Migrate()
один раз проверит, что ваша база данных существует, создайте ее, если нет, проверьте, применяется ли миграция Initial
, и примените, если нет.
Если вы затем позвоните Add-Migration SmallChange
, то же самое произойдетследующий запуск, подобный следующему:
- Существует ли база данных?Да
- Применена ли начальная миграция?Да
- Была ли применена миграция SmallChange?Нет
- Применить миграцию SmallChange
Ваша первая миграция должна выглядеть примерно так:
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "HelloWorld",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
MyString = table.Column<string>(nullable: true),
});
}
}
Если ваша миграция не выглядит так, онавозможно, ваш DbContext
настроен неправильно.Если ваши таблицы по-прежнему не применяются, попробуйте запустить обновление базы данных из консоли диспетчера пакетов и посмотрите, что именно происходит с Update-Database -Verbose