2017-03-06 109 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()'方法名称类似于此方法可以创建自己的迁移。但事实并非如此。这只适用于现有的迁移,如果有的话。它的功能就像'数据库更新'而不是'添加迁移'。 –