2、Entity Framework Core 3.1入门教程-创建数据库和迁移
本文章是根据 微软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(代码优先)
博客文章可以转载,但不可以声明为原创
最新文章
- 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介
- CentOS 7.0 Nvidia显卡安装步骤
- here 文档
- ASP.NET 自定义URL重写 分类: ASP.NET 2014-10-31 16:05 174人阅读 评论(0) 收藏
- 5332盛照宗 如何获取新技能+c语言学习调查
- apktool反编译工具
- php call_user_func和call_user_func_array
- 工厂模式(Factory)和抽象工厂模式(Abstract Factory)
- 项目实战14—ELK 企业内部日志分析系统
- composer在update时提示file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO
- 前端 CSS 注释
- intellij idea svn 修改文件后,父文件夹也标注修改
- Embedded SW uses STL or not
- WebService使用实例
- Linux线程编程之生产者消费者问题
- C#方法参数传递-同时使用ref和out关键字
- public, protected, private,internal,protected internal的区别
- POJ2739(尺取法)
- Python-S9——Day82-CRM项目实战
- lucene 分词器