EF не будет создавать пустую базу данных - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать базу данных через EF, чтобы хранить участников и их местоположения.
Я смотрел на другие примеры, но независимо от того, что я делаю, когда я запускаю свою программу, моя база данных нене создается.

Я заметил, что в приведенном мной примере создан класс DataInitializer, который помещает некоторые записи в базу данных.Я еще не сделал этого, так как я хотел бы проверить, создается ли моя база данных с правильными столбцами.
Не может быть проблема с наличием данных в базе данных?

public class ApplicationDbContext : DbContext
{
    public DbSet<Lid> Leden { get; set; }
    public DbSet<Locatie> Locaties { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.ApplyConfiguration(new LidConfiguration());
        builder.ApplyConfiguration(new LocatieConfiguration());
    }
}

Appsettings.json:

{ "ConnectionStrings": {
    "DefaultConnection": "Server=.\\sqlexpress;Database=Taijitan;Trusted_Connection=True;MultipleActiveResultSets=true"},
"Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

В приведенном мной примере файл startup.cs также содержит

services.AddScoped<BeerhallDataInitializer>();

и полностью внизу

beerhallDataInitializer.InitializeData();

Не знаюПредположим, что это является причиной проблемы, но я больше не уверен,

РЕДАКТИРОВАТЬ:

public class BeerhallDataInitializer
{
    private readonly ApplicationDbContext _dbContext;

    public BeerhallDataInitializer(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public void InitializeData()
    {
        _dbContext.Database.EnsureDeleted();
        if (_dbContext.Database.EnsureCreated())
        { *create new objects and add them to _dbcontext*
          _dbContext.SaveChanges();
        }
}

1 Ответ

0 голосов
/ 18 февраля 2019

Чтобы запустить миграцию, сначала нужно создать миграцию с помощью команды: 'dotnet ef migrations add InitialCreate' Во-вторых, затем вам нужно запустить миграцию с помощью команды: 'обновление базы данных dotnet ef' или создатькод, который запускает пропущенные миграции, и я могу предположить, что именно это делает beerhallDataInitializer.InitializeData (), но не может знать наверняка, так как у меня нет больше информации об этом, но для возможности миграции через код вам нужна ссылка на IApplicationBuilder, как вфайл startup.cs:

            DbInitializer.Migrate<ApplicationDbContext>(app);

и мой dbinitilizer:

public static class DbInitializer
    {
        public static void Migrate<T>(IApplicationBuilder app) where T : DbContext
        {
            using (var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
            {
                scope.ServiceProvider.GetRequiredService<T>().Database.Migrate();
            }
        }
    }

Надеюсь, что это поможет, просто прокомментируйте ниже, но предоставьте больше информации о том, что вы сделали

Изменить:

попробуйте изменить строку подключения на:

Data Source=localhost\\SQLEXPRESS;Initial Catalog=Taijitan;Integrated Security=True
...