种子数据:为我们的数据库表添加初始数据,就称之为种子数据,就是使用codefirst开发模式,采用EntityFramek Core迁移命令的时候,对数据库表初始化一条数据,或者多条数据
这样做有利于后期维护,保持项目实体类的版本和数据库表版本同步,如果哪天把实体类中某一个字段的类型给改了,这个时候种子数据会报错,提示我们数据库也要同步修改。
新建一个类,取名为ModelBuilderExtensions.cs:
public static class ModelBuilderExtensions { public static void Send(this ModelBuilder modelBuilder) { modelBuilder.Entity<Student>().HasData(new Student { Id = 5, FirstName = "哈哈哈", LastName = "嘿嘿嘿", BirthDate = System.DateTime.Now, Gender = Gender.其它 }); } }
因为这是扩展方法,使用静态的比较好,可以直接调用,然后在Context类里初始化调用:
public class DataContext:DbContext { public DataContext(DbContextOptions<DataContext> contextOptions):base(contextOptions) { } public DbSet<Student> Student { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Send(); } }
然后执行:
add-migration addSendSource
更新数据库:
update-database
这样,在迁移过程中,种子数据就会转化为相应的sql语句,为相应表添加相应的数据。