zoukankan      html  css  js  c++  java
  • Code First 数据迁移 转

    一、为模型更改设置 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、只需要将MigrationsConfiguration.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;
            }
        }


    参考网址

    http://www.cnblogs.com/hugh251325/archive/2013/03/21/2972431.html

    http://www.cnblogs.com/youring2/p/mvc-5-adding-a-new-field.html

    http://blog.csdn.net/zy332719794/article/details/8845405

    http://www.ejutuo.com/bbs/thread-3225-1-1.html

    http://www.cnblogs.com/chinabc/archive/2013/01/16/2846062.html         MVC中Code First编程一些小技巧

  • 相关阅读:
    一些程序员必备的英语词汇及释义
    ETL工具Talend最佳实践
    spark-submit使用yarn cluster模式时如何获取applicationId?
    On-heap vs Off-heap 堆内内存与堆外内存
    【Kail 学习笔记】kali信息搜集工具之IKE-Scan
    【Kail 学习笔记】kali信息搜集工具之Sparta(斯巴达)
    渗透常用命令
    渗透测试中常用WINDOWS命令
    Jvoke:Java环境下调用系统命令
    SpringCloud以及Nacos服务注册IP选择问题
  • 原文地址:https://www.cnblogs.com/xuyufeng/p/4334240.html
Copyright © 2011-2022 走看看