一、为模型更改设置 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;
        }
    }


参考网址

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编程一些小技巧

posted on 2016-12-05 15:30  孟涛  阅读(1421)  评论(0编辑  收藏  举报