EF 使用Migration对数据进行无缝迁移
参考地址:http://www.cnblogs.com/miro/p/4164076.html
http://www.cnblogs.com/mzwhj/p/5264035.html
http://www.cnblogs.com/icyJ/p/migration.html
1. 在nuget控制台上键入: enable-migrations –EnableAutomaticMigration:$true 来增加一个confiration的一个配置文件。
2. 在dbcontext构造函数中注入“数据库初始化方式”:
1 public Model1() 2 : base("name=Model1") 3 { 4 //数据库的初始化方式 5 Database.SetInitializer(new MigrateDatabaseToLatestVersion<Model1, Migrations.Configuration>("Model1")); 6 7 }
3. 改一下db的名字,因为第一次使用codefirst的话,我们并没有db存在。。。
4. 执行savechange
using (Model1 db = new Model1()) { db.Database.Log = Console.WriteLine; db.Students.Add(new Student() { StudentName = "jack123" }); db.SaveChanges(); }
如果做到修改model不做dropdatabase(删除数据库)的操作?
1. add column的操作:
2. remove column操作:
把student表的RowVersion踢掉。。。 会存在一个数据丢失的问题。。。
默认情况下,这种危险的操作ef是否可以默认放行呢???当然不会,会报错,得在Configuration加上 AutomaticMigrationDataLossAllowed = true;
1 namespace ConsoleApplication23.Migrations 2 { 3 using System; 4 using System.Data.Entity; 5 using System.Data.Entity.Migrations; 6 using System.Linq; 7 8 internal sealed class Configuration : DbMigrationsConfiguration<ConsoleApplication23.Model1> 9 { 10 public Configuration() 11 { 12 AutomaticMigrationsEnabled = true; 13 AutomaticMigrationDataLossAllowed = true; 14 } 15 16 /// <summary> 17 /// 种子数据 18 /// </summary> 19 /// <param name="context"></param> 20 protected override void Seed(ConsoleApplication23.Model1 context) 21 { 22 // This method will be called after migrating to the latest version. 23 24 // You can use the DbSet<T>.AddOrUpdate() helper extension method 25 // to avoid creating duplicate seed data. E.g. 26 // 27 // context.People.AddOrUpdate( 28 // p => p.FullName, 29 // new Person { FullName = "Andrew Peters" }, 30 // new Person { FullName = "Brice Lambson" }, 31 // new Person { FullName = "Rowan Miller" } 32 // ); 33 // 34 } 35 } 36 }
添加一张新表迁移
1. Enable-Migrations启动迁移
2. add-migration Add表名Table。(如add-migration AddTestTable,添加一张Test表)
3. update-database
删属性:
http://www.cnblogs.com/icyJ/p/migration.html
1. Add一个迁移节点,命名为DelPaperTest。执行此命令,生成相应的迁移类文件。
2. 最后执行Update-Database,在这里我们用Update-Database -Verbose命令,查看一下执行的详细内容。
改属性:
http://www.cnblogs.com/icyJ/p/migration.html
1. Add-Migration 命名为:ModifyTest,执行此命令,生成相应的迁移类文件
2. 最后执行Update-Database,在这里我们用Update-Database -Verbose命令,查看一下执行的详细内容。
注意:说白了,迁移就是直接 Add-Migration一个迁移节点,他们自动检测你的模型里面的属性是否增加、属性是否修改,是否要添加表。然后Update-Database就可以直接执行迁移了。

浙公网安备 33010602011771号