codefirst数据库迁移

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codefirst数据库迁移相关的知识,希望对你有一定的参考价值。

一、为模型更改设置 Code First 数据迁移

    1、工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者     

          Enable-Migrations -ContextTypeName Mvc.Models.DataContext

Enable-Migrations -ContextTypeName 命名空间.上下文名称

          注:如果正确的话 则显示“已为项目 xxx启用 Code First 迁移。”,

          Enable-Migrations命令创建了一个Migrations文件夹和Configuration.cs文件

    2、程序包管理器控制台—>输入“add-migration Initial”创建初始化迁移。

         注:名称“Initial”是随意命名,即要添加的字段。用来命名创建好的迁移文件。

    3、程序包管理器控制台—>输入“update-database”
    4、运行程序,更新完毕。

二、进一步
    问题已经解决了,我们再来深入一下这种迁移方式。
    当我们增加列(增加实体字段)时,可以不必重复上面的所有操作。
    1、只需要将\Migrations\Configuration.cs文件中的AutomaticMigrationsEnabled = false;改成true
    2、工具—>库程序包管理器—>程序包管理器控制台—>输入“update-database”

三、当我们删除列(删除实体字段)时,同样使用上面的操作,没有成功,报会丢失数据,

        所以不能简单地执行“update-database”就能完成。

    1、执行命令“add-migration Initial”
    2、执行命令“update database”
    3、运行程序,更新完毕

 

四、很强大的迁移

public class ContactContext : DbContext
    {
        public ContactContext()
            : base("name=DefaultConnection")
        {
            //自动创建表,如果Entity有改到就更新到表结构
            Database.SetInitializer<ContactContext>(new MigrateDatabaseToLatestVersion<ContactContext, ReportingDbMigrationsConfiguration>());
        }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //表名为类名,不是上面带s的名字  //移除复数表名的契约
            modelBuilder.Conventions.Remove<IncludeMetadataConvention>();     //不创建EdmMetadata表  //防止黑幕交易 要不然每次都要访问 EdmMetadata这个表
        }


        public DbSet<City> Cities { get; set; }
        public DbSet<Area> Area { get; set; }
        public DbSet<Campaign> Campaign { get; set; }
    }


    internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<ContactContext>
    {
        public ReportingDbMigrationsConfiguration()
        {
            AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
            AutomaticMigrationDataLossAllowed = true;
        }
    }

 

以上是关于codefirst数据库迁移的主要内容,如果未能解决你的问题,请参考以下文章

codefirst数据库迁移

EF6 Codefirst+MySql 数据库迁移

EF CodeFirst 数据库创建与迁移

EF CodeFirst数据迁移与防数据库删除

EF6 在原有数据库中使用 CodeFirst 总复习(重建迁移)

CodeFirst