EF6.X代码迁移

Code First 代码迁移是为了时刻保持领域模型与数据库架构同步,Entity Framework 作为幕后辛勤的劳动者,通过一定程序的自动化使这一切变得更容易。

代码迁移命令

在Code First 模式中进行迁移(Migrations)常见的命令有如下4个:

  • Enable-Migrations :表示在项目中启用代码迁移

  • Add-Migrations :表示对已挂起模型改变搭建基架,也就是说在上次钱以后对模型进行了更改,以此为下一次迁移搭建基架,此时生成的模型状态为挂起状态(或者称为待定状态)。

  • Update-Database:表示通过 Add-Migrations 命令将挂起的模型迁移应用到数据库中并保持模型同步。

  • Get-Migrations:表示显示已应用到数据库的迁移。

命令使用

  • Enable-Migrations
Enable-Migrations

默认生成文件夹及文件

运行Enable-Migrations 未指定任何其他参数,此时生成的迁移目录将是 Migrations,迁移的项目为包管理器控制台中的默认项目且迁移目录和上下文包含在同一项目中。

当执行带有参数的命令时:

Enable-Migrations -ContextTypeName EfDbContext -MigrationsDirectory JeffckMigrations
Enable-Migrations 带参数命令
生成指定文件夹名称
  • Add-Migrations

此命令一般用在我们修改了POCO后,需要执行该命令。将POCO的变更信息采用代码的方式记录下来,方便后面同步更新到数据库中。

语法:
Add-Migrations 自定义脚本名称

语法:
Add-Migration First -IgnoreChanges
表示将忽略当前模型的改变。

  • Update-Database

通过运行 Update-Database 而未指定其他任何参数,说明更新数据库到最近的迁移。

运行命令:Update-Database -Script -SourceMigration $InitialDatabase

该命令会生成一个脚本,可以将目前任何版本的数据库升级到最新版本。生成的脚本包含检查_MigrationHistory表并且应用更改的逻辑。


迁移的本质

  • 实体框架啊审查映射的解决就方案中的模型。
  • 实体框架检查解决方案中的现有迁移,并确定自上次迁移以来所做的更改。
    -构建更改的“脚本”,实体框架就更改“脚本”添加到迁移文件中。
  • 迁移文件以时间戳和更改的简要名称说明。

每一个迁移脚本都对应数据库中“_MigrationHistory”表中的一条数据。

_MigrationHistory这个表是从哪里来的?有什么用?

_MigrationHistory 表有 Entity Framework 自动创建,用于跟踪已应用于数据库的状态更改。当实体框架将迁移应用于数据库时,会查询_MigrationHistory 表并将其与存储在已编译项目中的迁移进行比较,并应用缺少的迁移。

当我们在NuGet管理器控制台运行Update-Database 时,发生了什么呢?

  • 它始终按照附加到迁移名称开头的时间戳的顺序来查看迁移。
  • 数据库中不存在(但存在于代码中)的任何迁移都将按照时间戳的顺序应用于数据库。
  • 再次创建当前领域模型的哈希值,并与应用于数据库的最后一次迁移的散列模型值进行比较(存储在_MigrationHistory表中)。

我们如何解决团队协作而导致的迁移问题呢?

团队可以采用自动迁移方式解决该问题,可是这样会导致后期难以维护,所以我们采用手动去维护,同时保持同时迁移的记录可追踪。采用以下4步骤进行:

(1)、回滚模型

语法:

Update-Database -TargetMigration 迁移名

采用此命令,可以将当前数据库回滚到指定迁移时的状态。
(2)、重命名和更新时间戳
(3)、更新模型

强制重新检查模型改变
语法:

Add-Migration 迁移名称 -Force

(4)、迁移模型

对于EF迁移,我们需要记住以下三点:

  • EF 实体框架使用_MigrationHistory表来追踪应用于数据库的更改。
  • EF实体框架创建项目中当前模型状态的哈希值,并将其与_MigrationHistory表中的模型转台存储进行比较,以确定数据库是否为当前状态。
  • 进行迁移时,始终按照时间戳(升序)的顺序同步到数据库。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容