EF应用CodeFirst模式,数据迁移的基本用法要点摘记

第一次使用EntityFramework做CodeFirst的开发,在做数据迁移时遇到不少问题,花费了一整天的时间学习调整,总算时学会了基本用法和要点。现在整理后贴出来,希望对和我一样的初用者能有一些帮助,少走一些弯路,少花一点时间摸索,都是值得的。




[plain] view plain copy

print?


    1. 一. 模型设计 
    2.      1.  遵循EF标准,注意表关系配对 

 

    1.      2.  数据模型里尽量把必须的属性和说明都写全 
    2.      3.  EF默认id字段为主键,如果没有,需指定主键 

 

    1.  
    2. 二. 数据迁移 

 

    1.      1.  命令运行环境:visual studio工具栏->工具->NuGet 程序包管理器->程序包管理器控制台 
    2.      2.  基本命令和常用参数 

 

    1.         >  get-help                  获取帮助的命令(例:get-help Enable-Migrations –detailed) 
    2.            –detailed                 详细用法 

 

    1.         >  Enable-Migrations         启用迁移 
    2.            -Force                    强制覆盖 

 

    1.            -ProjectName              目标项目(迁移类所在的项目) 
    2.            -StartUpProjectName       启动项目(包含数据库连接字符串配置文件所在的项目) 

 

    1.            -ContextTypeName          需要迁移的数据库(类) 
    2.            -ConnectionStringName     指定使用配置文件中连接字符串的名称 

 

    1.            -ConnectionString         指定使用的连接字符串 
    2.            -ConnectionProviderName   指定连接字符串的provider名称 

 

    1.            -MigrationsDirectory      指定迁移文件的目录(多个数据库,独立自动迁移用) 
    2.         >  Add-Migration             为挂起的Model变化添加迁移脚本 

 

    1.            -Force 
    2.            -ProjectName 

 

    1.            -StartUpProjectName 
    2.            -ConfigurationTypeName    指定使用的迁移配置 

 

    1.            -IgnoreChanges            忽略检测到挂起的model改变,为已有的数据库启用迁移创建一个初始的,空的迁移。 
    2.            -ConnectionStringName   

 

    1.            -ConnectionString       
    2.            -ConnectionProviderName  

 

    1.         >  Update-Database           将挂起的迁移更新到数据库 
    2.            -Force 

 

    1.            -ProjectName 
    2.            -StartProjectName 

 

    1.            -ConfigurationTypeName 
    2.            -ConnectionStringName  

 

    1.            -ConnectionString  
    2.            -ConnectionProviderName  

 

    1.            -SourceMigration          只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。 
    2.            -TargetMigration          指定将数据库更新到哪个迁移的名称。 

 

    1.            -Script                   生成SQL脚本 
    2.         >  Get-Migrations            获取已经应用的迁移                                    

 

    1.      3.  迁移操作步骤举例: 
    2.              DataBase                       :解决方案中,数据模型层项目名称 

 

    1.              Member                         :解决方案中,启动项的名称 
    2.              DataBase.Member.MemberEntities :需要应用数据迁移的数据上下文 

 

    1.          a.  第一次启用迁移,输入命令:  
    2.              Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities  

 

    1.              并敲回车键,然后打开生成的Migrations文件夹中的Configuration.cs文件,  
    2.              把构造方法中的AutomaticMigrationsEnabled = false;改为AutomaticMigrationsEnabled = true; 

 

    1.              如果有多个数据库,每个库需要独立指定迁移文件,命令格式如下: 
    2.              Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities -MigrationsDirectory:MemberMigrations 

 

    1.          b.  模型有改动时,输入命令:add-migration update20150508 -ProjectName DataBase -StartUpProjectName Member -Force并敲回车键,创建迁移脚本 
    2.              然后 输入命令:Update-Database -Verbose -ProjectName DataBase -StartUpProjectName Member并敲回车键,执行迁移操作 

 

    1.      4.  配置自动迁移 
    2.          在应用程序的入口方法(函数)里注册自动迁移: 

 

    1.          Database.SetInitializer(new MigrateDatabaseToLatestVersion());  
    2.          注意:Configuration.cs生成的是internal sealed class,如果不在启动程序集中,则需要修改成public 

 

    1.      5.  脱离visual studio环境做数据库版本迁移,可用migrate.exe,可参考:http://msdn.microsoft.com/zh-cn/data/jj618307 
    2.  

 

    1. 三. 注意事项: 
    2.      1.  连接字符串不用DBFirst自动生成的那么复杂,采用如下格式即可: 

 

    1.         
    2.      2.  有挂起的Model改变时,会导致操作不正常,注意操作步骤,必要时清理挂起的迁移。 

 

    1.      3.  修正后数据库,里面的数据如果需要调整,用Configuration.cs文件里的Seed方法,示例如下: 
    2.         protected override void Seed(DataBase.Member.MemberEntities context) 

 

    1.         { 
    2.             var users = new List

 

    1.             { 
    2.                 new User { Account = "test",   Password = "123" }, 

 

    1.                 new User { Account = "admin",   Password = "456" } 
    2.             }; 

 

    1.             users.ForEach(s => context.Users.AddOrUpdate(p => p.Account, s)); 
    2.             context.SaveChanges(); 

 

    1.         } 



[img]http://static.blog.csdn.net/images/save_snippets.png" alt="[/img]

[code="plain"]一. 模型设计
     1.  遵循EF标准,注意表关系配对
     2.  数据模型里尽量把必须的属性和说明都写全
     3.  EF默认id字段为主键,如果没有,需指定主键

二. 数据迁移
     1.  命令运行环境:visual studio工具栏->工具->NuGet 程序包管理器->程序包管理器控制台
     2.  基本命令和常用参数
        >  get-help                  获取帮助的命令(例:get-help Enable-Migrations –detailed)
           –detailed                 详细用法
        >  Enable-Migrations         启用迁移
           -Force                    强制覆盖
           -ProjectName              目标项目(迁移类所在的项目)
           -StartUpProjectName       启动项目(包含数据库连接字符串配置文件所在的项目)
           -ContextTypeName          需要迁移的数据库(类)
           -ConnectionStringName     指定使用配置文件中连接字符串的名称
           -ConnectionString         指定使用的连接字符串
           -ConnectionProviderName   指定连接字符串的provider名称
           -MigrationsDirectory      指定迁移文件的目录(多个数据库,独立自动迁移用)
        >  Add-Migration             为挂起的Model变化添加迁移脚本
           -Force
           -ProjectName
           -StartUpProjectName
           -ConfigurationTypeName    指定使用的迁移配置
           -IgnoreChanges            忽略检测到挂起的model改变,为已有的数据库启用迁移创建一个初始的,空的迁移。
           -ConnectionStringName 
           -ConnectionString     
           -ConnectionProviderName
        >  Update-Database           将挂起的迁移更新到数据库
           -Force
           -ProjectName
           -StartProjectName
           -ConfigurationTypeName
           -ConnectionStringName
           -ConnectionString
           -ConnectionProviderName
           -SourceMigration          只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。
           -TargetMigration          指定将数据库更新到哪个迁移的名称。
           -Script                   生成SQL脚本
        >  Get-Migrations            获取已经应用的迁移                                  
     3.  迁移操作步骤举例:
             DataBase                       :解决方案中,数据模型层项目名称
             Member                         :解决方案中,启动项的名称
             DataBase.Member.MemberEntities :需要应用数据迁移的数据上下文
         a.  第一次启用迁移,输入命令:
             Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities
             并敲回车键,然后打开生成的Migrations文件夹中的Configuration.cs文件,
             把构造方法中的AutomaticMigrationsEnabled = false;改为AutomaticMigrationsEnabled = true;
             如果有多个数据库,每个库需要独立指定迁移文件,命令格式如下:
             Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities -MigrationsDirectory:MemberMigrations
         b.  模型有改动时,输入命令:add-migration update20150508 -ProjectName DataBase -StartUpProjectName Member -Force并敲回车键,创建迁移脚本
             然后 输入命令:Update-Database -Verbose -ProjectName DataBase -StartUpProjectName Member并敲回车键,执行迁移操作
     4.  配置自动迁移
         在应用程序的入口方法(函数)里注册自动迁移:
         Database.SetInitializer(new MigrateDatabaseToLatestVersion());
         注意:Configuration.cs生成的是internal sealed class,如果不在启动程序集中,则需要修改成public
     5.  脱离visual studio环境做数据库版本迁移,可用migrate.exe,可参考:http://msdn.microsoft.com/zh-cn/data/jj618307

三. 注意事项:
     1.  连接字符串不用DBFirst自动生成的那么复杂,采用如下格式即可:
        
     2.  有挂起的Model改变时,会导致操作不正常,注意操作步骤,必要时清理挂起的迁移。
     3.  修正后数据库,里面的数据如果需要调整,用Configuration.cs文件里的Seed方法,示例如下:
        protected override void Seed(DataBase.Member.MemberEntities context)
        {
            var users = new List
            {
                new User { Account = "test",   Password = "123" },
                new User { Account = "admin",   Password = "456" }
            };
            users.ForEach(s => context.Users.AddOrUpdate(p => p.Account, s));
            context.SaveChanges();
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值