2014-04-04 92 views
1

即使啓用了自動遷移,我是否必須在包管理器控制檯中手動發出Update-Database命令?自動遷移和手動調用更新數據庫

我正在運行MVC4和EF6。該解決方案針對.NET 4(我不能改變這個不幸)。

編輯:我意識到代碼遷移之間的差異,這將需要我正確種子存在的表。這個問題更多地基於一個場景,我添加一個沒有關係的表,我認爲它會運行?

編輯2:表應自動添加

============

新的表定義

public class InboundFile : Entity 
{ 
    [Required] 
    public String FilePath { get; set; } 
} 

EF配置文件

public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
     MigrationsDirectory = @"Migrations"; 
    } 

    protected override void Seed(Unifi.Context.DBContext context) 
    { 
     context.InboundFiles.AddOrUpdate(
      x => x.FilePath, 
      new InboundFile { CreateDate = DateTime.Now, ModifiedDate = DateTime.Now, FilePath = "c:/test", IsDeleted = false } 
     ); 
    } 

DB語境

公共類的DbContext:的DbContext {

public DBContext() 
     : base("MyConn") 
    { 

    } 

    public DbSet<User> Users { get; set; } 

    public DbSet<UserRole> UserRoles { get; set; } 

    public DbSet<Region> Regions { get; set; } 

    public DbSet<InboundFile> InboundFiles { get; set; } 

} 

回答

2

嘗試在你的Application_Start

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DbContext, Configuration>); 
using (var temp = new DbContext()) { 
    temp.Database.Initialize(true); 
} 

這將迫使它把這個運行update-database,並在這樣做seed,您的每一次應用程序啓動。

+0

完美!這正是我所期待的 – mituw16

0

Update-Database觸發 「更新」 操作。您可以運行您的應用程序,數據庫將在應用程序啓動時更新。

我更喜歡手動運行Update-Database,因爲我可以看到是否有任何db遷移錯誤。

+0

對,所以這是我有點困惑。我在我的上下文中添加了另一個表,沒有關係,因此沒有必要擔心錯誤,然後運行應用程序。對我來說有點奇怪的是,即使我開啓了自動遷移功能,表格並未添加到我的數據庫中。更奇怪的是,我手動發佈了「更新數據庫」,並發現並運行了自動遷移。 – mituw16

+0

我不確定它是否重要,但我將網絡和上下文作爲整個解決方案的一部分放在不同的項目中。 – mituw16

+0

你能否爲你的桌子分享新的代碼。我希望看到db上下文和實體類本身的變化。 – Andrei