本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文

  • [Entity Framework] disable automatic migration, 执行update-migration仍然会显示有automatic migration
  • [Entity Framework] code base migration / automatic migration

问题起因

今天在做项目的时候需要修改db的两个column,将两个column的type改为nullable.

public int? AUsage { get; set; }
public int? BUsage { get; set; }

Package Manager Console中输入命令

Add-Migration xxxx

结果发现报错,提示有部分pending migration.这个好解决,其实只要将那部分pending的migration文件删除就可以了.但是由于项目是共同开发的.我担心删除后会影响到以后的db部署.网上查到这些pending的migration需要执行一次

update migration(-Vobose)

当然了,部分pending的migration顺利更新到DB,但是有一个migration还是报错.提示就如同下方所示

Applying explicit migrations: [201805081508118_CreateOrganisation].
Applying explicit migration: 201805081508118_CreateOrganisation.
Applying automatic migration: 201805081508117_CreateOrganisation_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Answers' in the database.

好奇怪我没看到我的migration文件中有类似于201805081508117_xxxxx_AutomaticMigration这种文件, 那么为什么update database的时候需要执行一次explicit migration,和一次automatic migration呢?

我检查了我的configuration文件,显示已经关闭了automatic migration

public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = false;
}

于是没有办法,只能上网查找解决方案.

问题排查

首先必须了解什么是EF的两种migration方式

automatic migration 简而言之就是可以在你加入一个model后运行application, EF会自动将这个实体类更新到相应的DB中,无需你做其他的操作.但是如果你是对于一个已经存在的model实体类的属性进行修改, 这种模式无法自动更新到DB.

code base migration 这种migration是我项目中用的方式.这种方式相比较前者更加灵活, 可以通过配置来进行灵活的migration以及revert.主要使用命令行的方式进行操作DB,详细的资料可以去文章下方找对应的链接细看.

那么目前来看我们项目中使用的是code-based migration. 但是为何会在命令行出现automatic的字样? 我还是没有解决这个问题. 后来我在Stack Overflow上查到一个问题现象和我一样的,但是没有相关的回答. (后期我在解决了问题后也回去解答了问题).

此外找到了一篇资料跟我的情况还算类似. 其中提问者自问自答了问题, 说是项目进行阶段, 不知道什么原因, automatic migration和code-based migration被混合使用了.其中automatic migration的资源文件resx文件里面有个source属性会导致在update-database的时候必须执行一次automatic migration...

好吧回来看看这个方案能否解决我的问题, 我将出现问题的migration的资源文件的source属性remove掉之后, 再次执行update-migration.

果然可以将pending的migration顺利update到db的_MigrationHistory当中了...

问题算是解决...

参考资料

Stack Overflow:

解决问题的链接https://stackoverflow.com/questions/12341470/update-database-tries-to-do-an-automatic-migration-even-with-automatic-migration

我的Stack Overflow回答https://stackoverflow.com/questions/50679792/disable-automatic-migrations-in-entity-framework/54320652?noredirect=1#comment95460550_54320652

code base migration && automatic migrationhttp://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx

othershttps://coding.abel.nu/2012/02/ef-migrations-and-a-merge-conflict/


希望以上内容能够帮助到遇到同样问题的你.如有其它思路可以随时联系我.

【Entity Framework】disable automatic migration, 执行update-migration仍然会显示有automatic migration的更多相关文章

  1. Entity Framework 在MySQL中执行SQL语句,关于参数问题

    在Entity Framework中添加MySQL模型,在写代码的过程中需要直接执行SQL语句. 在SQL语句中用到了@curRank := 0 这样在SQL语句中定义参数,同时还会有传入参数:ai. ...

  2. Entity Framework 6 暂停重试执行策略

    EF6引入一个弹性连接的功能,也就是允许重新尝试执行失败的数据库操作.某些复杂的场景中,可能需要启用或停用重试执行的策略,但是EF框架暂时尚未提供直接的设置开关,将来可能会加入这种配置.幸运的是,很容 ...

  3. ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)

    引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...

  4. Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  5. MVC5 Entity Framework学习之实现继承

    之前你已经学习了怎样处理并发异常,在本节中你将学习怎样实现继承. 在面向对象的编程中,你能够使用继承来重用代码.接下来你将改动Instructor和Student类,让它们派生自Person基类,该基 ...

  6. Asp.Net MVC 模型(使用Entity Framework创建模型类)

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  7. MVC5 Entity Framework学习之实现主要的CRUD功能

    在上一篇文章中,我们使用Entity Framework 和SQL Server LocalDB创建了一个MVC应用程序,并使用它来存储和显示数据.在这篇文章中,你将对由 MVC框架自己主动创建的CR ...

  8. C# Entity Framework查询小技巧 NoTracking

    在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...

  9. Entity Framework Core 生成跟踪列

    本文翻译自<Entity Framework Core: Generate tracking columns>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意:我使用的是 ...

随机推荐

  1. PL/SQL控制结构

    顺序结构 按先后顺序 分支判断结构 IF语句 IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statem ...

  2. 23.react-router 路由

    箭头函数扩展: 箭头函数: functoin 函数名(参数){    函数体 } 箭头函数: 1.把function删掉 , 2.参数和{}之间加上 箭头=> 简写: 1.参数的简写:只有一个参 ...

  3. vue的组件基础

    组件分为全局组件和局部组件. 组件的核心是template:所有的数据都为template服务. 父组件子组件传值:因为子组件是父组件的个标签,完全等同于添加动态属性: 然后子组件能够通过props: ...

  4. linux --mariadb/redis数据库篇

    mariadb ---磁盘型数据库 基础安装 配置好yum源后,软件就可以通过配置的yum源进行安装,按理来讲安装mysql直接通过   yum install mariadb  -y  便可安装,但 ...

  5. svn和NetBeans一起使用造成svn老是死锁, database is locked

    其实我一直没发现,又一次我以为需要写些前端吧NetBeans关了,使用HBuilder写vue,因为内存只有8G,乱七八糟的一些东西一开,只剩20%左右,我就把 NetBeans关了,发现更新svn的 ...

  6. Gym 101981K - Kangaroo Puzzle - [玄学][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem K]

    题目链接:http://codeforces.com/gym/101981/problem/K Your friend has made a computer video game called “K ...

  7. REST风格的5条关键原则

    REST风格的5条关键原则包括: (1)网络上的所有事物都被抽象为资源. (2)每个资源对应一个唯一的资源标识. (3)通过通用的连接件接口对资源进行操作. (4)对资源的各种操作不会改变资源标识. ...

  8. 软件加密工具-Virbox 开发者工具盒

    功能 Virbox 开发者工具盒是由深思数盾研发的一套软件加密工具,将加壳工具.API文档及操作流程文档等集成在一起,方便软件开发者使用. 您可以通过 Virbox 开发者工具盒实现: dll.exe ...

  9. java框架之SpringBoot(7)-异常处理

    前言 在 SpringBoot 项目中,默认情况下,使用浏览器访问一个不存在的地址会返回如下错误页面: 而当客户端未非浏览器时,错误信息则会以 json 数据返回,如下: 会出现如上效果的原因是 Sp ...

  10. 【Python】-NO.97.Note.2.Python -【Python 基本数据类型】

    1.0.0 Summary Tittle:[Python]-NO.97.Note.2.Python -[Python 基本数据类型] Style:Python Series:Python Since: ...