`

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

阅读更多

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




[plain] view plain copy

print?


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

 

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

 

       
    1. 二. 数据迁移 

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

                 -Force 
    1.            -ProjectName 

 

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

 

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

 

                 -ConnectionString       
    1.            -ConnectionProviderName  

 

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

 

                 -ProjectName 
    1.            -StartProjectName 

 

                 -ConfigurationTypeName 
    1.            -ConnectionStringName  

 

                 -ConnectionString  
    1.            -ConnectionProviderName  

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

              { 
    1.             var users = new List

 

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

 

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

 

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

 

              } 



[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();
        }

 

分享到:
评论

相关推荐

    Hibrenate 学习摘记

    例如,`<cacheusage="read-only"/>` 表示缓存模式为只读,这意味着缓存中的数据不会被更新,适用于查询密集型的应用场景;`<cacheusage="read-write"/>` 则支持读写操作,允许数据更新,但可能导致更多的锁竞争。 #...

    Codelife 不止代码 - 自阅读加注标签-技术规划的借鉴 有摘记和感想.md

    Codelife 不止代码 - 自阅读加注标签-技术规划的借鉴 有摘记和感想.md,提供了原文的详细目录大纲,更重要的是给出了自学摘记,记录下诸多感想。 人的学习进步体现在对抽象问题的概括和具体问题的有针对性的见解,...

    Fluent重要说明摘记.pdf

    Fluent软件应用过程中的一些比较重要的说明摘记

    013 《数据分析从入门到进阶》读书笔记

    看过的道、术有一些积累了,但真正存入脑海...《数据分析从入门到进阶》作者:陈红波,刘顺祥等 摘记 一、数据分析之道、术及工具(excel,sql,tableau) 二、python数据分析回归模型常用技术 作者:积跬步,慕至千里

    ejb3的一些摘记

    EJB(Enterprise JavaBeans)是Java EE平台中的一个核心组件,用于构建企业级分布式应用程序。EJB 3是其第三个主要版本,发布于2006年,它引入了...如果你正在探索或使用EJB 3,这些摘记和文档将是你宝贵的参考资料。

    自主研修摘记.doc

    【自主研修摘记】的主题聚焦于如何激发学生对计算的兴趣,这在数学教育中尤为重要。以下是摘记中提到的五个关键策略: 1. **创设情境,激发兴趣**:教师应当利用教材内容和学生的心理特点,设计引人入胜的课堂开头...

    数据分析体系是什么?该怎么搭建?.md

    **数据分析体系**能**更有效率**的支持业务,把数据报表、专题报表串起来,有层次展现,应用到业务中。**有节奏、有主次、有顺序的展现**数据。 **搭建数据分析体系的基本思路**: 明确服务对象即针对的需求...

    《Effective C++》摘记

    ### 《Effective C++》摘记知识点解析 #### 标题与描述概述 - **标题**:“《Effective C++》摘记”:该标题表明了文章的主要内容是关于《Effective C++》一书中的精华总结。 - **描述**:“《Effective C++》中的...

    第5课网络摘记教学设计.doc

    【网络摘记教学设计】 本课程的核心是教授学生如何有效地在网络中查找、搜集信息,并将这些信息整理成有条理的文档,特别是使用Microsoft Word进行简单的排版。教学目标包括三个方面:一是掌握资料查找和搜集的基本...

    信息系统项目管理师摘记

    软考信息系统管理师考试摘记。 项 目 管 理 知 识 体 系(九大管理) INPUT TOOL OUTPUT 4.1 制定项目章程 1、合同(如果适用) 1、项目选择方法 1、项目章程 2、项目工作说明书 2、项目管理方法系   3、事业环境...

    《胡希恕伤寒论坛讲座》摘记.doc

    《胡希恕伤寒论坛讲座》摘记.doc

    胡希恕伤寒论坛的讲座摘记.doc

    本文摘记了胡希恕伤寒论坛的讲座要点,总共十八点,涵盖了中医基础理论、方剂学、诊断学等多方面的知识点。 一、温病不能发汗,不能吃泻药,更不能用火攻,只能用白虎汤。 本点讲述了温病的治疗原则,温病不能使用...

    阅读摘记|Facebook设计B端产品的4项基本原则 .doc

    Facebook在设计B端产品时,遵循了四个核心原则,这些原则旨在创造高效、用户导向且适应性强的企业级工具。下面是对这些原则的详细解释: 1. **帮助用户成长**:B端产品不仅要协助用户完成任务,还要促进他们的专业...

    计算机操作系统(第四版)汤晓丹著复习摘记.pdf

    - 进程控制块(PCB):PCB是操作系统中最重要的数据结构,它记录了进程的基本信息,用于进程的创建、撤销、调度、同步和通信等管理操作。PCB包含进程标志符、处理机状态、进程调度信息、进程控制信息等。 以上内容...

    英语教研组工作要点.doc

    1. **深化课程改革**:强调以先进的教育教学理念改革课堂教学,将新课标的"基本理念"和"实施建议"融入教学实践,旨在构建自主、合作、简约、高效的课堂模式。 2. **学习与研究**:教师需持续学习教育理论,特别是...

    构建高性能web站点摘记.pdf

    使用SSI(服务器端包含)可实现局部静态化,但可能会影响静态文件的吞吐率。 动态脚本加速主要针对PHP、Python等解释性语言,通过缓存中间代码(opcode)减少解释执行的开销,提高执行速度。 浏览器缓存能显著减少...

    unix,你在学UNIX?这个高手的摘记,非常不错,快下吧。

    它不仅在科学研究、教育领域有着重要的地位,在商业应用和互联网服务中也扮演着关键角色。 #### 二、UNIX系统特性 - **模块化设计**:UNIX系统的设计强调模块化,这意味着其功能组件可以独立地进行开发和维护,同时...

    RF 小信号分立器件产品及设计手册

    ### 应用摘记 #### BB202,低压调频立体声无线接收机 这一案例研究展示了如何利用BB202芯片设计一款低功耗、高性能的FM立体声接收机,特别适用于便携式设备。 #### RF开关在蓝牙中的应用 蓝牙技术广泛应用于短...

    思想品德计划总结高中政治有效课堂教学探索摘记.doc

    近年来,我国大力推动课堂改革,寻求更有效的教学模式。政治学科因其理论性强、抽象概念多的特点,激发学生兴趣尤为困难。因此,我们需要创新教学方式,让课堂变得生动活泼,引导学生积极参与,从而减轻师生负担,...

    斯蒂芬P罗宾斯管理学笔记

    斯蒂芬·P·罗宾斯是全球知名的管理学权威,他的著作被广泛应用于商学院的教育和企业培训中。这份“斯蒂芬P罗宾斯管理学笔记”是一份宝贵的考研资料,它涵盖了管理学的核心概念、理论和实践,旨在帮助学生深入理解和...

Global site tag (gtag.js) - Google Analytics