本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解。

视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR

GitHub源码:https://github.com/hllive/LearnEFCore3.1

1、概述

如何生成数据库以及后来发生变化进行迁移

生成迁移的流程

  • 1、创建Model相当于是要映射到数据库中的表
  • 2、创建Migration迁移文件(对源码版本控制友好)
  • 3、使用Migration迁移文件来生成数据库或生成脚本

执行要求

AppDbContext 这个类是在Data类库项目中,而Data项目类型是一个类库,想让EFCore生成数据库或数据迁移的话,它必须有一个可执行文件,所以它这一个项目是不能执行的。

那么就得需要依靠【Web应用程序】,它能生成可执行文件,就得通过它来生成数据库。

除此之外,Migration还所需的安装库,(这两个库在上节中已经安装)

  • 1、Microsoft.EntityFrameworkCore.Design
  • 2、Microsoft.EntityFrameworkCore.Tools

安装好包后需要执行一些迁移用到的命令,迁移命令需要在【程序包管理器控制台】中执行;怎么打开程序包管理器控制台:菜单中的【视图】=>【其他窗口】=>【程序包管理器控制台】

在控制台中的【默认项目】选为Data,也就是包含AppDbContext类的项目



通过执行以下命令可以查看帮助

get-help entityframework

常用的两个命令

  • Add-Migration  添加一个迁移文件
  • Update-Database  把迁移文件应用到数据库,执行数据库的更新或创建

2、执行迁移

add-migration inital

inital是添加迁移文件的命名(可以自定义)

执行遇到以下错误



解决方案:将WebApi应用程序设为启用项目,选中【WebApi项目】右击选择【设为启用项目】

再执行又遇到以下错误



解决方案:这个提示是说在WebApi项目中没有安装Microsoft.EntityFrameworkCore.Design,我们在WebApi项目上安装Microsoft.EntityFrameworkCore.Design包就可以了

看到以下情况这就是执行成功了



执行成功后在Data项目生成Migrations文件夹



第一个文件叫xxxx_inital文件就是我们命名的迁移文件

xxxxModelSnapshot相当于是一个快照,这个文件非常重要,不能手动去改,EFCore使用这个文件来追踪当前所有Model的变更状态

3、生成数据库或脚本

  • 1、Update-Database  将数据库更新为指定的迁移,可以添加参数-verbose查看执行过程中的一些明细
  • 2、Script-Migration  从迁移文件中生成一个脚本(通常在生产环境中使用)执行命令后会自动打开生成的脚本文件



看到Done结果就说明已经生成和更新数据库成功,通过【SQL Serve对象资源管理器】可以查看生成后的数据库的情况。

这种先写Model再生成数据的办法叫Code Frist(代码优先)

博客文章可以转载,但不可以声明为原创

最新文章

  1. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介
  2. CentOS 7.0 Nvidia显卡安装步骤
  3. here 文档
  4. ASP.NET 自定义URL重写 分类: ASP.NET 2014-10-31 16:05 174人阅读 评论(0) 收藏
  5. 5332盛照宗 如何获取新技能+c语言学习调查
  6. apktool反编译工具
  7. php call_user_func和call_user_func_array
  8. 工厂模式(Factory)和抽象工厂模式(Abstract Factory)
  9. 项目实战14—ELK 企业内部日志分析系统
  10. composer在update时提示file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO
  11. 前端 CSS 注释
  12. intellij idea svn 修改文件后,父文件夹也标注修改
  13. Embedded SW uses STL or not
  14. WebService使用实例
  15. Linux线程编程之生产者消费者问题
  16. C#方法参数传递-同时使用ref和out关键字
  17. public, protected, private,internal,protected internal的区别
  18. POJ2739(尺取法)
  19. Python-S9——Day82-CRM项目实战
  20. lucene 分词器

热门文章

  1. matplotlib常用基础知识
  2. Django学习路14_获取数据库中用户名字并展示,获取指定条数
  3. PHP preg_filter() 函数
  4. Flink状态妙用
  5. @RequestMapping 参数详解
  6. Redis教程——检视阅读
  7. C#LeetCode刷题-拒绝采样
  8. 动态规划算法详解 Dynamic Programming
  9. JDK8 String类知识总结
  10. Java实现token的生成与验证-登录功能