前言

翻译一篇有关EF数据迁移的文章,以备日后所用,文章若有翻译不当的地方请指出,将就点看,废话少说,看话题。【注意】:文章非一字一句的翻译,就重要的问题进行解释并解决。

话题引入

无法确定这种场景是否是大家也遇见过并且是频繁出现的,这种场景通常出现在需要对大量的数据进行迁移,导致EF数据迁移使得EF迁移状态呈现出一种不可用的状态,最终出现在新的数据迁移上无法进行更新数据库或者回滚。也就是说当进行数据迁移时有可能导致数据库和EF架构出现不一致的状态即所谓的异步,接下来我们将一步一步来解决这个问题。

温馨提示:如果你确定要走重置数据迁移的路线,请确保备份你的代码以及数据库,以防出现的架构非你所预期,当然了,EF代码生成器和架构匹配的如此完美,在数据库中亦是如此,但是以防失效并且你不想在没有备份的情况下陷入绝境,为什么这样说呢?在迁移里,你可能有你自定义的代码,此时将需要额外的工作来更新数据库,此时无法保证这样的工作是否能成功完成,所以为了安全,归根结底,请备份。

移除和重置数据迁移

step one

删除我们进行数据迁移在数据库中生成的表,如下:

首先删除_MigrationHistory 表,通过删除迁移记录表来告诉数据迁移已经被应用,如果这个表一直存在,EF将检测最新的版本的数据迁移是否已经被应用上,与此同时如果成功了则会抛出数据库和EF架构不同步的错误,如果你删除了这个表,EF将不会去检测架构是否匹配

step two

删除项目中的数据迁移。如下:

我们需要留下Configuration.cs文件,因为它可能包含初始化数据添加代码,当然你没有需要初始化的数据代码,我们也可以删除这个文件或者整个文件夹。此时我们运行这个应用程序将不会出现任何差错,因为此时在数据库中没有任何数据迁移表以及在项目中没有迁移文件

step three

通过【Enable-Migrations】重新创建数据迁移

若未完全删除整个项目的数据迁移文件夹则需要用上【Enable-Migrations -Force】命令

step four

通过【Add-Migration Initial】进行初始化数据迁移。

创建的文件里包含Up和Down方法定义了数据库的架构

基于表的DbContext和Model类创建了表和外键以及其他约束的命令,EF通过DbContext找到每个Model类,指出其关系和外键并且通过应用定义在Model类的特性设置,最终以代码来描述他们,此时你将看到如下

step five

通过【Update-Database】命令更新到数据库

此时你通过此命令来更新到数据库则出现【数据库已存在某表的对象】,此时为了解决这一点,我们可以通过注释UP方法来伪造出迁移。在UP方法上加上【return】即可(注意:完成后删除return,此时则回到了同步状态),如下:

此时再来运行【Update-Database】命令即可成功,如下:

finally

最后一步相对来说是最笨重也是繁重的,通过使用【Update-Database -script】来对本地和远程的数据库进行更新。最终将使得数据库与EF架构处于同步的状态。当然你觉得有些不对劲你可以通过VS中的SQL Server架构比较工具或者是Red Gate's 非常棒的SQL比较工具来进行比对。

重置EntityFramework数据迁移到洁净状态的更多相关文章

  1. EntityFramework数据迁移(笔记)

    1.启用迁移 在Package Manager Console中运行Enable-Migrations命令 此命令已将Migrations文件夹添加到我们的项目中,此新文件夹包含两个文件: Confi ...

  2. C#+EntityFramework编程方式详细之Code First 数据迁移

    在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...

  3. EntityFramework Code First便捷工具——数据迁移

    使用EntityFramework Code First开发,数据迁移是一个不得不提的技术. 在我们的开发过程中,难免需要对模型进行改进,模型改进后,会导致实体集与数据库不一致,当然我们可以通过删除数 ...

  4. EntityFramework Code First 模式下使用数据迁移

    启用数据迁移 在程序包管理控制台选择安装了EntityFramework的项目,键入如下指令以启EF用数迁移. Enable-Migrations 命令成功运行后,所选项目下会添加名为Migratio ...

  5. 【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  6. EntityFramework 7 更名为EntityFramework Core(预发布状态)

    前言 最近很少去学习和探索新的东西,尤其是之前一直比较关注的EF领域,本身不太懒,但是苦于环境比较影响自身的心情,所以迟迟没有下笔,但是不去学习感觉在精神层面缺少点什么,同时也有园友说EF又更新了,要 ...

  7. Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理

    Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Fr ...

  8. Entity Framework Code First Migrations--EF 的数据迁移

    1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用 使用nuget控制台执行: Install-Package EntityFramework 2.新建一个实体 ...

  9. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

随机推荐

  1. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

  2. Bubble Sort (5775)

    Bubble Sort Problem Description   P is a permutation of the integers from 1 to N(index starting from ...

  3. 最小生成树 prime + 队列优化

    存图方式 最小生成树prime+队列优化 优化后时间复杂度是O(m*lgm) m为边数 优化后简直神速,应该说对于绝大多数的题目来说都够用了 具体有多快呢 请参照这篇博客:堆排序 Heapsort / ...

  4. 配置Spark on YARN集群内存

    参考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 运行文件有几个G大,默 ...

  5. java-sql注入攻击

    注射式攻击的原理 SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库.SQL是结构化查询语言的简称,它是访问数据库的事实标准.目前,大多数Web应用都使用SQL数据库来存放应用程序的数据. ...

  6. perl 遍历对象数组

    my $appsList ; eval { $appsList = $db->query( $sqlstr1 )->hashes->to_array; }; ### $appsLis ...

  7. io.js入门(二)—— 所支持的ES6(上)

    io.js的官网上有专门介绍其所支持的ES6特性的页面(点我查看),上面介绍到,相比nodeJS,io.js已从根本上支持了新版V8引擎上所支持的ES6特性,无需再添加任何运行时标志(如 --harm ...

  8. 利用history实现无刷新跳转界面

    看标题是不是感觉很拽的样子,其实没什么啦,也就是时下常说的单页面应用.这种web形式在如今的移动端十分流行,毕竟在移动端频繁得去刷新界面不是很友好,而且还费流量.今天我们要做一个小的app(移动端), ...

  9. (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法

    这周开始发现一个很让人抓狂的现象,QQ音乐网页(http://y.qq.com)与QQ视频(http://v.qq.com/)网页打开超慢,甚至是无法打开,严重影响了业余的音乐视频生活. 以QQ视频为 ...

  10. 辛巴学院-Unity-剑英的c#提高篇(一)主循环

    这是测试版 辛巴学院:正大光明的不务正业. 最近刚刚离开了我服务了三年多的公司,因为一个无数次碰到的老问题,没钱了. 之前不知道做什么好的时候,机缘巧合之下和哒嗒网络的吴总聊了一下,发现了vr gam ...