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

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

长按二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙芯.NET正式发布 开源共享与开发者共成长

2020年12月19日&#xff0c;2020中国. NET开发者大会于苏州盛大开幕。本次大会以“开源、共享、创新”为主题&#xff0c;以线下城市苏州为中心&#xff0c;覆盖北京、上海、深圳、广州、长沙、成都、厦门、胶东等地区&#xff0c;是中国 .NET 开发者的大聚会&#xff0c;线上线…

划入 .NET 6版本目标,微软鼓励开发人员信任第三方库

喜欢就关注我们吧&#xff01;鉴于许多 .NET 社区的开发人员都不愿意使用非微软官方打造的库&#xff0c;近日&#xff0c;微软 .NET Framework 团队的项目经理 Immo Landwerth 发布了一个名为”Growing the .NET ecosystem“的文档&#xff0c;以鼓励 .NET 开发人员加强对第三…

归并排序 java 迭代_经典排序算法之归并排序(示例代码)

归并排序(英语&#xff1a;Merge sort&#xff0c;或mergesort)&#xff0c;是创建在归并操作上的一种有效的排序算法&#xff0c;效率为(大O符号)。1945年由约翰冯诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用&#xff0c;且各层分治递归可以…

新鲜高频笔面试题分享,Redis、MongoDB、ElasticSearch...

2020年可能是最短的一年&#xff0c;上班没几个月就发现要元旦了&#xff1b;2020年可能是最难的一年&#xff0c;各种降薪被离职风波&#xff1b;然而好消息是&#xff0c;2021年马上来了&#xff0c;跳槽季也要来了&#xff0c;一起开始备战吧&#xff0c;新年薪资up up&…

在 Windows 服务中托管 ASP.NET Core

概述众所周知&#xff0c;ASP.NET Core采用了和传统ASP.NET不同的托管和HTTP处理方式&#xff0c;即把服务器和托管环境完全解耦。ASP.NET Core内置了两个HTTP服务器实现&#xff0c;一个是基于libuv实现的Kestrel&#xff08;支持跨平台&#xff09;&#xff0c;一个是基于Win…

目录 | 数据结构与剑指Offer系列推文合集

【目录合集】| 作者 / Edison ZhouC#刷数据结构剑指Offer不知不觉&#xff0c;C#刷剑指Offer的系列推文就结束了&#xff0c;今天就把它们整理成目录合集。此外&#xff0c;考虑到剑指Offer和数据结构的关联&#xff0c;建议没有数据结构基础的童鞋先看看数据结构&#xff0c;再…

Abp vNext异常处理的缺陷/改造方案

之前吐槽Abp的用户/租户管理模块&#xff01;今天我又来了&#xff0c;这次我给Abp官方repo提了一个issue。目前Website使用Abp vNext开发&#xff0c;免不了要全局处理异常、提示服务器异常信息。1. Abp官方异常处理Abp项目默认会启动内置的异常处理&#xff0c;默认不将异常信…

开源项目葫芦藤:IdentityServer4的实现及其运用

前言本篇文章主要是讲解葫芦藤项目中对IdentityServer的实践使用&#xff0c;为了使您对本篇文章中所讲述的内容有深刻的认识&#xff0c;并且在阅读时避免感到乏味&#xff0c;文中的内容不会涉及太多的基础理论知识&#xff0c;而更多的是采用动手实践的方式进行讲解&#xf…

java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...

有必要多看几遍的关于字符和字节&#xff0c;例如文本文件&#xff0c;XML这些都是用字符流来读取和写入。而如RAR&#xff0c;EXE文件&#xff0c;图片等非文本&#xff0c;则用字节流来读取和写入。读写对象&#xff0c;传输对象在Java中很常使用&#xff0c;在javaBean中就经…

Beetlex之websocket/tls服务压测工具

为了方便压力测试ws服务&#xff0c;Beetlex同样提供相关工具来对ws/wss服务的性能进行测试测试。安装可以访问https://github.com/beetlex-io/TCPBenchmarks 下载最新版本工作&#xff0c;工具可以运行在linux和windows系统&#xff0c;安装完成后通过浏览器访问相关服务进行操…

大学班里80%都去培训班,为什么我没去

背景大四刚开始&#xff0c;各大培训机构就开始到各大高校开始宣传&#xff0c;我们学校也不例外&#xff1b;当时信息与计算科学这专业在我们学校并不景气&#xff0c;有好几次听说&#xff1a;如果我们那届的就职率还不行的话&#xff0c;那很大可能将此专业拿掉&#xff1b;…

如何在 C# 中使用 Buffer

缓冲区 是内存中的一组字节序列&#xff0c;缓冲 是用来处理落在内存中的数据&#xff0c;.NET 缓冲 指的是处理 非托管内存 中的数据&#xff0c;用 byte[] 来表示。当你想把数据写入到内存或者你想处理非托管内存中的数据&#xff0c;可以使用 .NET 提供的 System.Buffer类&a…

.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号

.NET SDK-Style 项目&#xff08;Core、Standard、.NET5&#xff09;中的版本号独立观察员 2020 年 12 月 24 日之前 .NET Framework 时&#xff0c;项目版本号等信息是存储在 AssemblyInfo.cs 文件中&#xff0c;通过程序集特性进行设置&#xff1a;.NET Core 之后&#xff0c…

[Stardust]星尘分布式全链路监控

随着业务的发展&#xff0c;微服务系统会变得越来越大&#xff0c;各个服务之间的调用关系也会日趋复杂。一个WebApi请求&#xff0c;后方可能经历多个微服务以及数据库和MQ操作&#xff0c;在这个调用过程中&#xff0c;可能因为某一个服务节点出现延迟或者失败&#xff0c;而…

如何在 C# 中使用 const,readonly,static

平时在开发时经常会用到 const,readonly,static 关键字&#xff0c;可以肯定这些关键词是完全不同的概念&#xff0c;但有时候他们在用法上很相似以至于在场景中不知道选择哪一个&#xff0c;这篇文章我们就来讨论 C# 中的 const&#xff0c;static 和 readonly 关键词&#xf…

2020,你收获了什么?又失去了什么?

这是头哥侃码的第228篇原创今天是圣诞节&#xff0c;既魔幻又真实的2020年&#xff0c;还有6天就要结束了。每年的年末&#xff0c;我都习惯在下班途中&#xff0c;把头靠在地铁车厢两侧的扶手上&#xff0c;闭上眼睛开始思考自己过去一年的收获与得失&#xff0c;并把这些思绪…

2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程

首先将准备建站的域名设置泛解析如baidu.com泛解析为 添加A记录为 *.baidu.com然后在iis里添加空头主机不能设置 汉字目录keywords.txt 关键字&#xff0c;一行一个domain.txt 域名&#xff0c;一行一个&#xff0c;*代表随机muban.html 模板文件&#xff0c;可以修改缓存在dat…

轻量级消息队列RedisQueue

消息队列&#xff08;Message Queue&#xff09;是分布式系统必不可少的中间件&#xff0c;大部分消息队列产品&#xff08;如RocketMQ/RabbitMQ/Kafka等&#xff09;要求团队有比较强的技术实力&#xff0c;不适用于中小团队&#xff0c;并且对.NET技术的支持力度不够。而Redi…

生态和能力是国内自研操作系统发展的关键

“缺芯少魂”一直是我国信息产业短板&#xff0c;如果无法实现国产化替代&#xff0c;信息安全和产业安全就犹如沙滩上盖房子&#xff0c;上层再坚固&#xff0c;地基不稳&#xff0c;一遇到风吹草动就有可能全部垮掉。近年来&#xff0c;国内自研操作系统厂商动作频频&#xf…

matlab群延时函数,群延迟函数(group delay function)群延迟滤波器 | 学步园

最近看了许多介绍Group delay function的论文&#xff0c;文章中大篇幅提到Group delay&#xff0c;group delay of digital filters,对这个方面的知识好像还挺有用的&#xff0c;所以想把它记录下来。然后总结下计算Group delay function的步骤。假设有N个样本的脉冲响应为h(n…