EF Code First 数据库迁移Migration剖析
1.简介
Entity Framework 的Code First 方式,提供了一种方式:编写模型Model,生成模型变更,根据模型变更修改数据库。
而其所以来的环境就是强大的Nuget,如果还在是VS2010一下的同学,请不要往下看了,将无一益处。
2.操作步骤
1)建立或修改Model,即实体类;
这里演示修改:
public class BootStrapLists { public int ID { get; set; } public string Title { get; set; } [DataType(DataType.MultilineText)] public string Description { get; set; } /// <summary> /// 新增一个时间字段 /// </summary> public DateTime CreateDate { get; set; } }
2)建立或修改ModelMap;
public class BootStrapListsMap : EntityTypeConfiguration<BootStrapLists> { public BootStrapListsMap() { ToTable(""); HasKey(zw => zw.ID).Property(zw => zw.ID).HasColumnName("ID"); Property(zw => zw.Title).HasColumnName("Title"); Property(zw => zw.Description).HasColumnName("Description"); //新增 Property(zw => zw.CreateDate).HasColumnName("CreateDate"); } }
3)在OnModelCreate时增加Map;
public DbSet<BootStrapLists> BootStrapLists { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new BootStrapListsMap()); //dynamically load all configuration
4)使用命令Add-Migration
如果是第一次使用,则请先使用:
Enable-Migrations
继续使用命令:
Add-Migration Tests
其中,Tests为自定义名称;
生成迁移文件:
5)使用命令Update-DataBase
Update-DataBase
迁移原理:查询数据库的表,__MigrationHistory,遍历Migrations文件夹下的所有文件,如果文件不在__MigrationHistory表内,那么就执行迁移。
Eg: 如果20141104233562_Tests不在数据库内,则执行迁移。
11)初始数据库:
22)执行:
33)执行之后的数据库:
修改表的结果:
6)深究
public partial class Tests : DbMigration { public override void Up() { AddColumn("dbo.BootStrapLists", "CreateDate", c => c.DateTime(nullable: true)); } public override void Down() { } }
类,DbMigration中邮很多API,可以直接修改数据库!