zoukankan      html  css  js  c++  java
  • EF6学习笔记七:代码迁移

    要专业系统地学习EF前往《你必须掌握的Entity Framework 6.x与Core 2.0》这本书的作者(汪鹏,Jeffcky)的博客:https://www.cnblogs.com/CreateMyself/

     这里主要记录一下我常用的几个迁移,还要其他的很多命令,我不去弄了

    常用的就四个

    Enable-Migrations:在项目中启用代码迁移

    Add-Migration  对已挂起模型改变搭建基架,在添加迁移的时候,EF要做这几步

          1.实体框架审查映射的解决方案中的模型

          2.实体框架检查解决方案中的现有迁移,并确定自上次迁移以来所做的更改

          3.构建更改的“脚本”,实体框架将更改“脚本”添加到迁移文件中

          4.迁移文件以时间戳和更改的简要命名说明

    Update-Database  通过add-migrations命令将挂起的模型迁移应用到数据库中并保持模型同步

    Get-Migrations:显示已经应用到数据库的迁移

    我在用数据迁移碰到的一些问题

    数据库中表的改动,比如要删除某张表,可能应为依赖的关系删除不了,我无法再通过代码迁移去更新,只能手动去数据库修改

    所以用数据迁移我的经验是,对于变动太大的模型,我会事先仔细想清楚,实体之间是什么关系要确定好,这也应该是我对数据迁移不太熟悉

    还有就是我添加迁移,生成了一个迁移文件,还没有更新迁移,然后我对数据模型做了更改,然后我再添加迁移,就会报错

    Unable to generate an explicit migration because the following explicit migrations are pending: [201901140747272_jinshantest1]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

    在尝试生成新的显式迁移之前,应用挂起的显式迁移。意思就是只能有一个迁移被挂起来,那我的做法,就是将我刚刚生成的那个迁移文件删掉,重新生成迁移。

    通常我在用update-database指令时会用到-verbose,这个可以打印详细信息,得到EF生成的SQL语句,当然还可以这样

     update-database -script -sourceMigration 201901070409494_jinshantest7 -verbose
    这样做就可以讲已经应用到数据库的迁移,生成的SQL语句给你在VS中一个新的Tab页显示出来,像这样

    使用update-database命令迁移的时候,如果参数都不给,默认就是迁移当前挂起的迁移文件,可以指定它迁移到指定的版本

    update-database -targetMigration jinshantest1

    对于EF的迁移我们要记住以下三点

    1、Entity Framework 实体框架使用_MigrationHistory表来追踪应用于数据库的更改

    2、Entity Framework 实体框架创建项目中当前模型状态的哈希值,并将其与_MigrationHistroy表中的模型状态存储进行比较,以确定数据库是否为当前状态

    3、进行迁移时,始终按照时间戳(升序)的顺序同步到数据库

    寻求系统帮助

    如果你对某一个指令不太了解,可以输入命令了解详细信息

    若要查看示例,请键入:get-help enable-migrations -examples

    有关详细信息,请键入:get-help enable-migrations -defailed

    若要获取技术信息,请键入:get-help enable-migrations -full

    其他命令

    cls 清屏,这和fildder一样

     后续更新

    EF Core 查看指定迁移文件生成的Sql语句

    Script-Migration -From 0 -To updateRecomputeTableName  -Context HKERPInventoryHubDbContext

    https://www.cnblogs.com/IIXS/p/11249379.html

  • 相关阅读:
    Maven name=archetypeCatalog value=internal
    ResponseBody和文件上传
    Idea控制台中文乱码
    idea tomcat部署项目路径
    git 常用操作
    webpack
    AbstractQueuedSynchronizer-AQS
    线程安全
    cpu多级缓存
    Axure中继器设置单选
  • 原文地址:https://www.cnblogs.com/anyihen/p/12818515.html
Copyright © 2011-2022 走看看