• 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

        在生成了image 红色框所示的文件和文件夹

        继续使用命令:

    Add-Migration Tests

    其中,Tests为自定义名称;

    image

    生成迁移文件:

    image

    5)使用命令Update-DataBase

    Update-DataBase

      迁移原理:查询数据库的表,__MigrationHistory,遍历Migrations文件夹下的所有文件,如果文件不在__MigrationHistory表内,那么就执行迁移。

    Eg:  如果20141104233562_Tests不在数据库内,则执行迁移。

    11)初始数据库:

    image

    22)执行:

    image

    33)执行之后的数据库:

    image

    修改表的结果:

    image

    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,可以直接修改数据库!

  • 相关阅读:
    第七章 第一月:开始 第二周:链接建设(2)
    基础篇 第四节 项目进度计划编辑 之 日历
    VSS2005 使用说明
    删除存储过程
    基础篇 第四节 项目进度计划编辑 之 任务关联性设定
    转载: input 的css技巧
    js: js判断回车键
    一个简单邮件发送类
    转载: php发送邮件原理
    css 小经验: 重构css的优化与技巧
  • 原文地址:https://www.cnblogs.com/pengzhen/p/4073029.html
Copyright © 2020-2023  润新知