2017-05-25 134 views
0

啓用遷移和更新數據庫我正在使用實體框架代碼第一種方法,並具有以下模型和數據庫上下文。我可以使用代碼

public class Patient 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
    } 

    public class PatientContext:DbContext 
    { 
     public DbSet<Patient> Persons { get; set; } 
    } 

我們在數據庫中創建的模型,我要運行Enable Migration,如果任何變化,然後在使用包管理器控制檯運行Update database

但有沒有什麼辦法可以做到這一點使用代碼。因此,當有人運行控制檯應用程序時,它將創建所有表模式。

class Program 
    { 
     static void Main(string[] args) 
     { 
      //Code to Create my tables 
      //Something similar to enable migration and update database 
     } 
    } 

我可以有主要的應用程序內創造了一個紀錄,這將創建表結構,但創造一個記錄創建表結構似乎是多餘的。此外,如果有任何模式更改,以下代碼將引發異常。

有沒有更好的方法?

static void Main(string[] args) 
     { 
      using (PatientContext pcontext = new DatabaseMigApp.PatientContext()) 
      { 
       pcontext.Patients.Add(new Patient() { FirstName = "Steve",Id = 1}); 
       pcontext.SaveChanges(); 

      } 
     } 
+1

見https://romiller.com/2012/02/09/running-scripting-migrations-from-code/ –

回答

2

是的,有。你必須首先運行啓用的遷移從包管理器控制檯-EnableAutomaticMigrations,使之產生一個配置類,如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<DatabaseMigApp.PatientContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(DatabaseMigApp.PatientContext context) 
    { 
    } 
} 

然後你可以更新的Program.cs如下自動遷移到最新版本基於模型的變化:

using System.Data.Entity; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     using (PatientContext pcontext = new DatabaseMigApp.PatientContext()) 
     { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<PatientContext, Configuration>()); 
      pcontext.Database.Initialize(true); 
     } 
    } 
} 

如果你不希望使用的自動遷移和手工生成它們(更多的控制),你可以關閉自動遷移,每次你改變你的模型添加遷移。在運行控制檯應用程序時,program.cs中的代碼仍然足以更新數據庫。

瞭解更多關於自動遷移here

相關問題