EntityFramework进阶——CodeFirst数据库迁移

与视觉操作界面相比,CodeFirst机制提供了一套命令行模式的迁移工具,协助开发人员有效的进行数据库与数据模型的同步维护操作。

新建一个控制台项目CFMigrationsDemo,选用来自数据库的EF设计器模式, 并向其中添加一个Product.cs类文件,如下图所示:

public class Product
{
   public int Id { get; set; }
   public string Name { get; set; }
}

 

Enable-Migrations :启动此项目的迁移功能

在程序包管理器中控制台输入上述命令,可以看到已经启用CodeFirst项目迁移功能,如下图所示:


 

 Add-Migration MigName:建立迁移文件,Add-Migration 和 MigName中间空一格,MigName为自定义名称,表示要创建的迁移文件名称,建议以有意义的名字来命名。

在程序包管理器控制台输入 Add-Migration AddProduct 以建立迁移文件,如下图所示:

生成的迁移文件如下图所示:

                                  

打开迁移文件可以看到如下代码:

    public partial class AddProduct : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.Products",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Name = c.String(),
                    })
                .PrimaryKey(t => t.Id);
            
        }
        
        public override void Down()
        {
            DropTable("dbo.Products");
        }
    }

 这是一个继承DbMigration的类文件,CodeFirst迁移通过自动生成的Up和Down方法记录每一次的变动内容,以支持数据库的升级和降级。通过调用Down方法可以将数据库恢复至此次迁移前的状态。

 


Update-Database:更新数据库

接下来完成第一次迁移操作,在程序包管理器控制平台输入上述命令:

                 

可以看到迁移已经顺利完成,在原来的数据库中添加了一个Product表:

                                        

 


结构变动迁移 

在Product.cs类中,添加一个字段Price:

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }
    }

重新打开程序包管理控制台对话框,在其中键入Add-Migration AddProductPrice添加一个迁移文件,再执行一次Update-Database指令,界面如下图所示:

 数据库已经生成Price字段属性:

                                          

 


查看SQL 

Update-Database —Verbose: 每一次迁移是通过SQL语句来完成数据库更新操作的,如果想要查看所使用的的SQL语句,可以加上-Verbose标志。

在Prodcut.cs类文件上增加属性Quantity以创建可以存储商品数量的字段:

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }
        public int Quantity { get; set; }
    }

首先执行Add-Migration AddProductQuantity命令添加迁移文件,在执行一次Update Database-Verbose命令,这个过程除了完成迁移操作外,同时会显示执行迁移的SQL语句,如下图所示:


指定迁移 

Update-Database -TargetMigration:MigrationName:Update-Database 和 -TargetMigration之间有空格。在执行Update—Database命令时,可以进一步指定所要迁移的版本,现在执行Update-Database -TargetMigration:AddProductQuantity,这是当前最新的版本,因此不会起作用。再执行前一个版本的迁移,执行Update-Database-TargetMigration:AddProductPrice命令,会导致降级。

                 

上述过程会导致降级,执行AddProductQuantity中的Down方法删除Quantity字段,恢复到AddProduct的状态。 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值