EF Code-First(Oracle)通过Migration来更新数据库的表的字段

关于Oracle中使用Entity Framework 6.x Code-First方式开发,请参考博客(菩提树下的杨过https://www.cnblogs.com/yjmyzz/p/how-to-use-code-first-in-oracle-with-entity-framework-6.html的具体介绍,里面关于使用Entity Framework进行Code-First开发以及创建Database Migration有详细的讲解以及官方参考的连接。这里就不赘述了。

使用EntityframeWork的CodeFirst来写程序的时候,会经常遇到需要修改实体内容(即表中的字段的内容),这个时候就需要用到Database Migration,但是在实际过程中难免会碰到一些问题,这里记录几个我遇到的问题,以及解决的方法。

1、关于创建和使用Migration,本文中连接参考的文章已经有了,这里总结一下几个使用命令。

工具(Tools)-->程序包管理器(Package Manager)-->程序包管理器控制台(Package Manager Console),1)Enable-Migrations;2)Add-Migration MigrationName;3)Update-Migration(这里好像之前写错了,应该是:Update-Database)

2、Update-Migration(这里好像之前写错了,应该是:Update-Database)出错。

Update-Migration(这里好像之前写错了,应该是:Update-Database)有时候会出错,出错的原因有很多,原因可能是配置问题,可能是数据库原因,以及其他原因,这个时候如果又找不到解决的方法,这个时候重新生成实体对应的表或者实体属性对应的表的字段,是无可奈何的一种下策。比如我在实际开发中遇到将没有添加[Attribute]的string类型属性添加[MaxLength]Attribute之后,生成Migration,怎么都通不过Update-Migration。无奈只好先删除旧的属性,再添加上去。就可以了。

3、Add-Migration出错。

Add-Migration出错一般容易报错的是“Unable to generate an explicit migration because the following explicit migrations are pending:[MigrationName].Apply the pending explicit migrations before attenpting to generate a new explicit migration”。这个错误是因为前面有一个新建(New Add-Migration Command)的Migration没有被执行(Update-Migration),处于听命(pending)的状态,只要先运行命令将这个migration执行了就解除pending状态了。一般都是由于update-migration执行不了才会导致后面的add-migration无法继续。这里可以先将之前的Migration里面的“public override void up()”方法里面的代码注释了在执行Update-Migration命令,这样不会对数据库有实际操作,也解除了pending状态。然后就可以添加新的Migration了。

附加(修改时间:2017年12月19日09:56)

使用AutomaticMigrationsEnabled = true(将Migrations文件夹下的Configurations.cs里面的设置改下就可以了)  这样以后更新数据库的时候只需要输入Update-Database就可以了,不用Add-Migration了。

 

 

posted @ 2017-11-18 13:51  powerio  阅读(2417)  评论(1编辑  收藏  举报