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

时间:2019-04-27 13:07:26   收藏:0   阅读:179

在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式,其中Model First以及Dtatabase First中,如果实体类(Model First)或者数据库(Dtatabase First)变化了,那么就需要数据库(Model First)或者实体类(Dtatabase First)来相应的变化,以保持实体类(Model First)和数据库(Dtatabase First)的表结构保持一致,Model First以及Dtatabase First这种实体类(Model First)和数据库(Dtatabase First)中的表结构保持一致比较好做,只要修改实体类(Model First)或者和数据库(Dtatabase First)中的表结构(表以及字段的修改),最后更新一下就好了,更新只要在在ADO.NET的 模型设计视图中,(如果是Model First)空白处右键选择 根据模型生成数据库(G)..,如果是Dtatabase First,从数据库更新模型(U)..)即可,这样就会更新数据库表结构和实体类,如下图所示:

技术分享图片

 

然而在C#+EntityFramework编程方式详细之Code First 中如果我们修改类实体类的话,重新运行的话就会报错(错误信息: InvalidOperationException,指出“创建数据库后,支持‘xxContext’上下文的模型已发生变化。请考虑使用 Code First 迁移更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)”),错误的原因是因为我们已经根据实体类生成数据库了,这时修改实体类的话再去操作生成数据库的就会报错了,那么我们要如何做呢,其实解决这种Code First 中修改类实体类,更新数据库的问题很简单,那就是需要进行数据迁移

所谓的数据迁移,其实就是使用 Code First 迁移改进应用程序的数据库架构,生成迁移以跟踪对 EF 模型所做的更改。

实体框架中的 Code First 迁移包括生成初始模型和数据库启用迁移生成和运行迁移,信息如果有兴趣的话可以阅读 Code First 迁移

而本文介绍的是Code First 迁移,是在实体类变化以后,来重新更新数据库,为了与上篇的Code First加以区分,这里新建一个控制台程序EFDemoDBModelEFTestEmptyCodeFirst,然后添加新建项,选择 ADO.NET实体数据模型,名称输入EFTestCodeFirstEmpty,

技术分享图片

 

点击  添加

技术分享图片

选择   空Code First模型,点击  完成。默认生成如下

 

 技术分享图片

 

为了演示方便,我们直接使用默认的的实体类 MyEntity(把上面MyEntity以及DbSet注释的放开)

技术分享图片

 

 添加测试代码生成数据库(数据库本文是默认的,可以在app.config配置文件中修改)

技术分享图片

 

测试代码:

技术分享图片

 

运行结果如下,在localdb的mssqllocaldb实例中生成数据库EFTestCodeFirstEmpty.MyEmptyModel

技术分享图片

 

 那么现在数据库已经生成,我们就来修改一下实体,然后在运行看看会有什么问题啊

技术分享图片

 

再运行一下(如下),看看错误信息,这错误信息就是 InvalidOperationException,指出“创建数据库后,支持‘xxContext’上下文的模型已发生变化。请考虑使用 Code First 迁移更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)”),错误的原因是因为我们已经根据实体类生成数据库了,这时修改实体类的话再去操作生成数据库的就会报错了,那么我们要如何做呢,其实解决这种Code First 中修改类实体类,更新数据库的问题很简单,那就是需要进行数据迁移

技术分享图片

 

下面为了解决这个问题,我们来进行下面操作也就是数据迁移

首先找到vs工具栏中的  工具  选择NuGet包管理器 选择 程序包管理器控制台 , 在vs的下面就会添加   程序包管理器控制台,如下

技术分享图片

 

 在vs的下面的程序包管理器控制台 里面   选择需要处理的 项目  本文是选择 EFTestCodeFirstEmpty

 技术分享图片

 

1、在包管理器控制台中运行 Enable-Migrations 命令

此命令已将“迁移”文件夹添加到项目中。 此新文件夹包含两个文件:

 

包管理器控制台中运行 Enable-Migrations 命令   结果如下

 

技术分享图片

 

2、Add-Migration 将基于自上次迁移创建以来对模型所做的更改来构建下一次迁移

      在包管理器控制台中运行 Add-Migration 命令   结果如下

 

技术分享图片

 

 3、Update-Database 将对数据库应用任意挂起的迁移

      在包管理器控制台中运行 Update-Database 命令   结果如下

 

技术分享图片

 

   以上就就是C#+EntityFramework 中Code First 修改实体类来更新数据库的全部操作,其实总结起来很简单,只要第一次根据实体类生成过数据库,之后又有需要修改类实体类(添加字段,标识,限制等),那么只要在包管理器控制台中运行三个命令  即可根据修改的实体类来更新数据库。

  三个命令如下

 

注解:

Enable-Migrations 命令已将“迁移”文件夹添加到项目中。 此新文件夹包含两个文件:

Add-Migration           将基于自上次迁移创建以来对模型所做的更改来构建下一次迁移

Update-Database     将对数据库应用任意挂起的迁移

 

原文:https://www.cnblogs.com/1175429393wljblog/p/10778277.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!