2017-03-06 63 views
3

我在Asp.net的mvc核心有三層應用程序和使用EF核心, 現在我想創建自動遷移,自動遷移EF核心的三層應用程序

我有DAL層可以在這裏找到我的上下文

public class AdminContext : DbContext 
    { 

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

    } 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 

     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<AdsAdsCategory>() 
      .HasKey(bc => new { bc.AdsId, bc.AdsCategoryId }); 

     modelBuilder.Entity<AdsAdsCategory>() 
      .HasOne(bc => bc.Ads) 
      .WithMany(b => b.AdsAdsCategories) 
      .HasForeignKey(bc => bc.AdsId); 

     modelBuilder.Entity<AdsAdsCategory>() 
      .HasOne(bc => bc.Category) 
      .WithMany(c => c.AdsAdsCategories) 
      .HasForeignKey(bc => bc.AdsCategoryId); 
    } 

    public DbSet<Ads> Adses { get; set; } 
    public DbSet<AdsCategory> AdsCategories { get; set; } 
    public DbSet<AdsPosition> AdsPositions { get; set; } 
    public DbSet<AdsCustomer> AdsCustomers { get; set; } 
} 

,並在我的應用程序啓動

我寫這篇文章的代碼

var context = app.ApplicationServices.GetService<AdminContext>(); 

     if (!context.Database.EnsureCreated()) 
      context.Database.Migrate(); 

當我運行應用數據庫創建和表生成但__migrationhistory不存在和遷移不產生,

當啓動時我除去產生這個線路碼

if (!context.Database.EnsureCreated()) 

數據庫創建和__migrationhistory表,但我的模型表不生成,

我怎麼能解決這個問題? 並在EF核心中的三層應用程序中運行自動遷移?

+0

您希望讓代碼在啓動時生成新的遷移並應用它,或者僅應用您在創建之前創建的遷移? – Mats391

+0

我希望migarion自動運行,當我更改模型時,數據庫被更新爲自動更新 – MrMVC

回答

2

EF內核中不存在像EF6一樣的自動遷移。你要麼必須產生在開始之前你遷移,然後使用

context.Database.Migrate(); 

,或者你在每次啓動放下你的整個數據庫,並使用

context.Database.EnsureCreated(); 

重新更新的數據庫。 第二個不允許您稍後添加任何遷移,因此您必須每次都重新創建整個數據庫。要刪除您可以使用的數據庫

context.Database.EnsureDeleted(); 
+0

'Migrate()'方法名稱類似於此方法可以創建自己的遷移。但事實並非如此。這隻適用於現有的遷移,如果有的話。它的功能就像'數據庫更新'而不是'添加遷移'。 –

相關問題