Code First——领域设计模式中非常有用。使用 Code First 模式,专注于领域设计,创建领域类,然后生成数据库。

1.创建数据模型类

一般就是数据库里面有哪些表,就创建哪些模型, POCO 类就够了。

    public partial class SmsPush{[Key]public int Id { get; set; }[MaxLength(128)]public string AppName { get; set; }[DataType(DataType.Text)]public string TargetValue { get; set; }[DataType(DataType.Text)]public string Content { get; set; }[DataType(DataType.DateTime)]public DateTime CreateTime { get; set; }}

2.安装 nuget 包

按您使用的数据选择包

  • sqlserver:Install-Package Microsoft.EntityFrameworkCore.SqlServer

  • mysql:Install-Package MySql.Data.EntityFrameworkCore

3.创建数据库上下文类

需要继承DbContext

public class MvcMovieContext : DbContext{public MvcMovieContext (DbContextOptions<MvcMovieContext> options): base(options){}public DbSet<Movie> Movie { get; set; }}

4.注册数据库上下文

在应用启动过程中,EF core 数据库上下文服务必须通过依赖注入注册。需要服务,通过构造函数注入即可。

  • sqlserver

 services.AddDbContext<MvcMovieContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
  • mysql

  services.AddDbContext<PushContext>(options =>{options.UseMySQL(Configuration.GetConnectionString("PushContext"));});

5.添加数据连接字符串

上面的Configuration.GetConnectionString,是从appsettings.json中读取的。所以需要添加相关配置。由于使用的是 mysql,所以相关配置如下

{"ConnectionStrings": {"PushContext": "Persist Security Info=False;database=push-center;server=localhost;Connect Timeout=30;user id=root; pwd=111111"}
}

mysql 链接字符串,参考 mysql 官方:https://dev.mysql.com/doc/dev/connector-net/8.0/html/P_MySql_Data_MySqlClient_MySqlConnection_ConnectionString.htm

6.安装 Mysql

由于博主是在 windows 下开发,所以这里介绍最简单的 windows 下安装 mysql 的方法及后续相关操作。这里我们推荐使用巧克力安装 mysql,一款越用越香的 windows 包管理器,如果不知道巧克力,请参考博文【Nginx】Nginx 部署实战——静态文件+反向代理+均衡负载+https+websocket,有关于巧克力的安装,可以类比 centos 的黄狗(yum).

#安装mysql
choco install mysql
#遇到让你选择是否运行脚本,Y/A 按着走
  • 有可能会遇到在https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-winx64.zip下载巨慢的情况(在公司下载很快,晚上在家下载很慢,不知道为啥,想办法吧),可以在巧克力执行powershell之前,也就是提示选择他要执行 C:\ProgramData\chocolatey\lib\mysql\tools\chocolateyInstall脚本,去编辑这个脚本,替换为国内资源镜像

#第三行
$url = 'https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-winx64.zip'
#替换为搜狐镜像 类似还有
#网易 http://mirrors.163.com/
#中科大 http://mirrors.ustc.edu.cn/
#清华 https://mirrors.tuna.tsinghua.edu.cn/
$url = 'http://mirrors.sohu.com/mysql/MySQL-8.0/mysql-8.0.20-winx64.zip'

不出意外,mysql就安装好了,路径C:\tools,甚至相关 windows 服务也装好了。根据之前的经验【One by one 系列】一步步部署.Net core 应用-CentOs 介绍的 mysql 安装后,初始化密码

# 修改密码
# 初次安装mysql,root账户没有密码。直接登录
mysql -u root
mysql>show databases;
mysql>set password for 'root'@'localhost' =password('设置你的密码');
Query OK, 0 rows affected (0.00 sec)
#不需要重启数据库即可生效

上面是针对 5.6 以下的版本有效,通过巧克力默认安装的是最新版本,是 8.0 版本,修改密码的操作需要更换如下 sql 语句。

mysql -u root#初始化root账户的密码
mysql>ALTER USER root@localhost IDENTIFIED BY '123456';

7.初始迁移-Initial migration

运用 efcore 迁移功能来创建数据库。migration 是可用于创建和更新数据库以匹配数据模型的一组工具

#第一步
Add-Migration InitialCreate#第二步
Update-Database
  • Add-Migration InitialCreate:生成 Migrations/{timestamp}_InitialCreate.cs 迁移文件 。InitialCreate 参数是迁移名称。可以使用任何名称,但是按照惯例,会选择可说明迁移的名称。因为这是首次迁移,所以生成的类包含用于创建数据库架构的代码。

  • Update-Database:将数据库更新到上一个命令创建的最新迁移。此命令运行在 Migrations/{time-stamp}_InitialCreate.cs 文件中 Up 方法,用于创建数据库的。

    • ps:Up 方法创建 表。Down 方法可还原 Up 迁移所做的架构更改。

  • 如果是数据库更新,会生成如下警告(可以忽略):

No type was specified for the decimal column 'Price' on entity type 'Movie'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'.

更多内容参考:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell

8.依赖注入数据库上下文

public class MoviesController : Controller
{private readonly MvcMovieContext _context;public MoviesController(MvcMovieContext context){_context = context;}
}

9.迁移回退

上面 migration 命令,主要依赖Microsoft.EntityFrameworkCore.Tools包,如果此包缺失,请安装。

#先检查下
Get-Help about_EntityFrameworkCore
PM> Get-Help about_EntityFrameworkCore_/\__---==/    \\___  ___   |.    \|\| __|| __|  |  )   \\\| _| | _|   \_/ |  //|\\|___||_|       /   \\\/\\TOPICabout_EntityFrameworkCoreSHORT DESCRIPTIONProvides information about the Entity Framework Core Package Manager Console Tools.LONG DESCRIPTIONThis topic describes the Entity Framework Core Package Manager Console Tools. See https://docs.efproject.net forinformation on Entity Framework Core.The following Entity Framework Core commands are available.Cmdlet                      Description--------------------------  ---------------------------------------------------Add-Migration               Adds a new migration.Drop-Database               Drops the database.Get-DbContext               Gets information about a DbContext type.Remove-Migration            Removes the last migration.Scaffold-DbContext          Scaffolds a DbContext and entity types for a database.Script-DbContext            Generates a SQL script from the current DbContext.Script-Migration            Generates a SQL script from migrations.Update-Database             Updates the database to a specified migration.SEE ALSOAdd-MigrationDrop-DatabaseGet-DbContextRemove-MigrationScaffold-DbContextScript-DbContextScript-MigrationUpdate-Database#上面是包没问题的象征,如果有问题,再执行如下命令
Install-Package Microsoft.EntityFrameworkCore.Tools

To undo this action, use Remove-Migration.

# POCO类修改=>修改数据表
# 给本次迁移取一个名字:UpdateEditions,初始化取的名字:InitialCreate
Add-Migration UpdateEditions# 更新
Update-Database# 突然发现可能有影响,那就回滚吧,删除上一次迁移(回滚针对迁移进行的代码更改)
Remove-Migration

Remove-Migration

参数 说明
-Force 恢复迁移(回滚应用于数据库的更改)。

参考链接

https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell

https://docs.microsoft.com/zh-cn/ef/core/

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-3.1&tabs=visual-studio

长按二维码关注

【.Net core】EFCore——Code First生成数据库与表相关推荐

  1. PowerDesigner生成数据库建表sql脚本

    PowerDesigner生成数据库建表sql脚本 一.生成sql server 2000或oracle建表sql脚本 1.新建一个物理模型,通过database菜单下的change current ...

  2. SQL Server 动态生成数据库所有表Insert语句

    一. 背景 SQL Server,如果我们需要把数据库A的所有表数据到数据库B中,通常我们会怎么做呢?我会使用SSMS的导入导出功能,进行表数据的导入导出,无可厚非,这样的导入非常简单和方便: 但是, ...

  3. (一)NET Core 项目中通过EF Core的Code First方式进行数据库的迁移

    EF Core 是现有EF库的修改版本,具有可扩展的,轻量级的和跨平台的支持.它支持关系型数据库和非关系型数据库.还支持"代码优先"或"数据库优先"方法作为编程 ...

  4. Springboot根据实体类生成数据库表

    springboot数据库(一)-springboot-JPA JPA:springboot -jpa:数据库的一系列的定义数据持久化的标准的体系 学习的目的是: 利用springboot实现对数据库 ...

  5. EF使用CodeFirst创建数据库和表

    EF支持三种实体模型:Code First,Model First和DB First,分别表示代码优先,模型优先和数据库优先.目前就个人来说使用CodeFirst最多,对此相对比较熟悉,先写下Code ...

  6. mysql 表引擎 entity framework_EntityFramework之数据库以及表基本创建(一)

    前言 之前有学过EF一段时间那时EF才4.0似乎还不太稳定,而现在EF都已7.0版本,同时AspNet Identity都与此大有关联,看来是大势所趋于是开始学习EF,在学EF过程中也遇到一些小问题, ...

  7. ASP.NET Core EFCore 之Code First

    1.在.NET Core项目中使用Nuget引用包 Sql Server 请安装 Microsoft.EntityFrameworkCore.SqlServer 2.添加实体类 [Table(&quo ...

  8. 在MVC3中使用code first生成数据局库并操作数据库

    1.建立Users和UserInfos两个实体类 对应的是数据库中的表 public class User{//类名+Id(User+Id)组成的字符串在数据库表中会设置该字段是主键且是按1的增量增长 ...

  9. .NET之生成数据库全流程

    开篇语 本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程.采用EFCore作为ORM框架. 本次示例环境:vs2019.net5.mysql 创建项目 本次事例代码是用过vs2019 ...

最新文章

  1. FPGA在人工智能时代的独特优势
  2. JAVA中String字符串比较equals()和equalsIgnoreCase()的区别
  3. html输入框点击后去掉默认文字颜色,input的一些默认样式的更改
  4. Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
  5. 【Servlet】Servlet声明配置
  6. Manuscript match— 找到最适合你文章的那个ta(之期刊杂志)
  7. 你的邮件为何被标记为垃圾邮件?
  8. 物流配送快递管理系统javabean
  9. 快速排序实验报告 c语言,快速排序算法的C语言实现
  10. 山大计算机学院副院长屠长河,孟祥旭(山东大学教授,博士生导师)_百度百科...
  11. FTP 打开文件夹提示该文件没有程序与之关联来执行该操作 请在控制面板的文件夹选项中创建关联
  12. Windows神软Classic Shell停更!经典开始菜单永别了
  13. 机器翻译baseline
  14. Win11的22H2依然没有WSA(Windows Subsystem for Android)?
  15. 冲奶粉有感 ----与代码的关系
  16. Excel之COUNTIF函数 判断包含关系
  17. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git
  18. 数据结构:设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的
  19. 有听力测试题的英语听力软件,英语听力软件哪个好?这几款最靠谱!
  20. 饺子(节操)播放器集成问题

热门文章

  1. 【转载】负数的二进制
  2. sql学习笔记---公用表达式(CTE)
  3. centOS安装Mysql指南
  4. UNIX环境高级编程笔记
  5. scss2css vscode设置_VSCode下让CSS文件完美支持SCSS或SASS语法方法
  6. 如何种植屡获殊荣的青豆
  7. 实现CSS在线美化(格式化)、压缩、加密、解密、混淆工具-toolfk程序员工具网
  8. c# XML和实体类之间相互转换(序列化和反序列化)
  9. 如何离线安装chrome插件
  10. 多云战略:企业如何精益求精?