2016-07-22 5 views
3

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

dotnet ef migrations add MigrationName -c DbContextName 
dotnet ef database update -c DbContextName 

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

Сначала я попытался сделать это, переопределив OnModelCreating, но мне не удалось. Она вернула меня об ошибке указывает на то, что таблицы не были созданы

Вот мой DbContext Class

public class AimeLoggerContext : DbContext 
    { 

     public AimeLoggerContext(DbContextOptions<AimeLoggerContext> options) 
      : base(options) 
     { 

      Database.Migrate(); 
     } 

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

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 

      modelBuilder.Entity("Aime.Logger.Loggers.Database.Model.Log", b => 
      { 
       b.Property<int>("Id") 
        .ValueGeneratedOnAdd(); 
       b.Property<DateTime>("Datetime"); 
       b.HasKey("Id"); 
       b.ToTable("Logs"); 

      }); 

      base.OnModelCreating(modelBuilder); 

     } 

     public DbSet<Log> Logs { get; set; } 


    } 

Любая идея?

ответ

3

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

RelationalDatabaseCreator databaseCreator = 
    (RelationalDatabaseCreator) context.Database.GetService<IDatabaseCreator>(); 
databaseCreator.CreateTables(); 
+0

Из всех различных решений, которые я видел онлайн, это единственный, который работает для меня! Благодаря! – OronDF343

3

Вместо DbContext.Database.Migrate() Я должен использовать метод DbContext.Database.EnsureCreated().

+0

Для уточнений: 'EnsureCreated()' для испытаний и т.д., когда вы всегда иметь не существующей или пустой базы данных. 'Migrate()' предназначен для производственного сервера, когда у вас может быть существующая база данных, и, возможно, потребуется выполнить миграцию. – MarkusSchaber

Смежные вопросы