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         }
View Code

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();
            }
View Code

如果做到修改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 }
View Code

 添加一张新表迁移

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就可以直接执行迁移了。

posted @ 2017-05-24 13:42  Dukezhou  阅读(285)  评论(0)    收藏  举报