【.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,一经查实,立即删除!

相关文章

mysql 备份配置文件_mySQL配置文件、备份与恢复

mysql配置文件mysql的配置文件为/etc/my.cnf配置文件查找次序&#xff1a;若在多个配置文件中均有设定&#xff0c;则最后找到的最终生效/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file/PATH/TO/CONF_FILE --> ~/.my.cnfmysql常用配置文件参数&#xff…

oracle java写目录权限_oracle分配权限 学习笔记--转载

在全局数据库ORCL下创建一个用户首先在开始--》运行——》sqlplus&#xff0c;然后输入 sys/change_on_install as sysdba以sys权限登陆进去然后可以进行操作&#xff1a;创建用户 create user test indentified by test;这样就创建了一个用户名密码都为test的用户但这个时候te…

龙芯.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&…

java读取整数列表_Java-检查整数列表中的X类整数

由于我没有足够的声誉来编辑我的文章,下面是我的答案gblodgett:嘿!谢谢你的回复。我正在做一个法克尔的游戏,因此我需要找出有多少1,2,3,4,5,6在列表中,然后给分(遵循规则)。我做了一个代码,似乎工作,尽管必须有一个更有效的方法来做。请随便看一看并给我一些反馈:公共int calc…

在 Windows 服务中托管 ASP.NET Core

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

java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例

Java 对 Properties 文件的操作详解及简单实例发布于 2020-8-7|复制链接摘记: Java 对 Properties 文件的操作简介在 Java 中&#xff0c;我们常用 java.util.Properties.Properties 类来解析 Properties 文件&#xff0c;Properties 格式文件是 Java 常用的配置文件&#xff0…

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

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

mysql数据库5120_超傻瓜 H3C S5120 限速配置

1出方向限速system-viewinterface GigabitEthernet ?/?/? (&#xff1f;是所要限制的端口号)qos lr outbound cir 数字 (cir是速率的意思&#xff0c;数字是kbps&#xff0c;如果按字节需要x8转换&#xff0c;必须是16的整数倍)出方向配置完毕2入方向限速1.system-viewacl n…

ricky java photos_【Melee】Ricky blog updates and new photos

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Blog FirstThursday, August 21, 2008Celebrate!Ok, so my computer is finally back in full swing, but sadly, Im missing a couple weeks of updates, which will be slightly complicated, racking my brain to remember, but…

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

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

java原生的编译软件_Java 转原生平台代码 RoboVM

软件介绍编者注&#xff1a;RoboVM 项目已经关闭&#xff0c;目前有开源替代产品BugVM。RoboVM 编译器可以将 Java 字节码翻译成 ARM 或者 x86 平台上的原生代码&#xff0c;应用可直接在 CPU 上运行&#xff0c;无需其他解释器或者虚拟机。RoboVM 同时包含一个 Java 到 Object…

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

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

facade java_Java设计模式之Facade模式

Java设计模式之Facade模式 GOF《设计模式》一书对Facade模式是这样描述的:为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口&#xff0c;使子系统更加容易使用。大致意思是说&#xff1a;使用一种比原有方式更简单的办法与系统交互。例如&#xff0c;…

如何在 ASP.NET Core Web API 中以三种方式返回数据

在 ASP.NET Core 中有三种返回 数据 和 HTTP状态码 的方式&#xff0c;最简单的就是直接返回指定的类型实例&#xff0c;如下代码所示&#xff1a;[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{[HttpGet]public …

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

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

Dotnet Core多版本API共存的优雅实现

API升级&#xff0c;新旧版本的API共存&#xff0c;怎么管理呢&#xff1f;一、前言最近&#xff0c;单位APP做了升级&#xff0c;同步的&#xff0c;API也做了升级。升级过程中&#xff0c;出现了一点问题&#xff1a;API升级后&#xff0c;旧API也需要保留&#xff0c;因为有…

java 文件监听器_java7 文件监听器

java7中的文件监听&#xff0c;主要可以监听指定目录下的文件&#xff1a;新建 删除 修改等操作。StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE 这三个事件 被注册到watchService 对象中&#xff0c;之后…