EntityFrameworkCore больше не создает сущности - PullRequest
0 голосов
/ 09 ноября 2019

Entity Framework Core 2.2.0 |Visual Studio 2019

Когда я впервые запустил этот код, он создал объекты в моей базе данных SQL Server Express в схеме dbo:

public class MyTable
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyTable> MyTables { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);

        optionsBuilder.UseSqlServer('connection string to sql server express');
    }
}

using (var context = new MyContext ())
{
    context.Database.EnsureCreated();
}

Затем я перешел в SSMS и удалил вручную MyTable.

Теперь, когда я запускаю тот же код, он не создает MyTable.

Логическое объяснение состоит в том, что EFC использует таблицы отслеживания, которые указывают, что MyTable все еще существует, и поэтому он не 'Я не могу его создать.

Но я не могу найти такие таблицы отслеживания.

Какое объяснение?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Перейти к консоли диспетчера пакетов в Visual 2019

type)

add-migration migrationname
update-database
0 голосов
/ 09 ноября 2019

EF запустит миграцию, которая создала таблицу, поэтому он предполагает, что таблица есть.

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

Если вы удаляете таблицы не через EF, то вы больше не находитесь в сценарии с первым кодом.

Лучшим вариантом может быть воссоздание базы данных. Это приведет к удалению данных .

Если вы не можете позволить себе потерять данные, воссоздайте таблицу непосредственно в БД (или восстановите из резервной копии, в которой еще есть таблица. Наконец, есть путьс таблицей истории миграции, но это может быть сложно в зависимости от конкретных деталей.

...