2017-05-25 138 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

相关问题