zoukankan      html  css  js  c++  java
  • 使用Code first 进行更新数据库结构(数据迁移)

       CodeFirst 背景

         code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成。 

    做法:

       采用CodeFirst模式开发过程中,EntityFramework会在我们第一次运行网站的时候自动创建数据库,并生成对应的表。但是在项目的过程中,那么我们可能需要修改Model类,那么在重新运行项目的时候,就会报错了

    The model backing the 'EF DbContext' context has changed since the database was created. Consider using Code First Migrations to update the database

    意思是说,数据上下文变动,在CodeFirst模式下与数据库不一致,需要更新数据库。

    那么解决办法是什么呢?有的人会删除数据库,这样就会生成一个新的数据库,但是我们每次都要删除数据库吗?那么以前的数据同样都没有了,这样又要重新录入了吗?这样的做法是蛋疼的。 

       所以使用数据迁移就可以解决这个问题了 :

      打开NuGet控制台:

    2.运行命令:Enable-Migrations

    可能会出现例如这样的错误:

    Checking if the context targets an existing database...
    Detected database created with a database initializer. Scaffolded migration '201212090821166_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter.
    Code First Migrations enabled for project MvcApplication1.

    此时项目会出现如下文件夹:

    然后打开Configurations.cs

    修改成如下:

    执行:Update-Database:

    可能会出现一些错误提示,没关系。继续走下去

    执行:Enable-Migrations-Force

    最后执行:Update-Database

    你会发现数据库的数据没有改变,而数据库却更新了。

    这只是我的个人工作笔记而已,希望能帮助到需要帮助的朋友,如果有什么错误的,恳请各位大神提出,小弟十分感谢!

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/MrLee/p/3373228.html
Copyright © 2011-2022 走看看