.Net Core 3.0 WebAPI && MySQL 8.0搭建详情
微软在2019年9月24日发布了dotNet Core 3.0和C# 8.0,添加了许多新Features,详情点我。无疑dotNet Core 3.0和一个月之后即将发布的dotNet Core 3.1对于dotNet来说是一个重要的里程碑。
对于MySQL而言,现在越来越多的商业公司使用MySQL来作为自己的主要数据库,虽然MySQL已经迎来了8.0的版本,有着更完善的数据能力,更好的性能,但是还是有很多公司在新项目上使用MySQL5.7。我在技术上很鄙视这样的做法,一旦使用的老技术Out of support,对已有项目的改动和迁移所做的努力将会是当初学习新和试错的N倍。
言归正传,今天来记录一下使用dotNet Core 3.0的WebAPI和MySQL 8.0的使用(本次实践基于已有数据库,没有完成数据库的需要使用Workbench或Navicat搭建数据库)。
- 准备工作
准备工作的目的是搭建一个便于我们调试的工程环境。考虑到以后用到微服务的可能,这里并不能用硬编码(Hardcoding)写死启动的地址和端口,以下工作就是为了达到指定端口启动的目的。
- 建立工程
平常一些小项目我都用VS Code来创建工程了,但这次我使用Visual Studio 2019 16.3.5(dotNet Core 3.0需要至少16.3的版本,如果用VS Code需要最新的C#插件)创建工程。
为了日后上微服务可能,我们并不能写死项目的启动地址和端口;而且得益于dotNet Core自带Kestrel,所以我并不打算使用IIS Express作为调试使用。在"解决方案次源管理器"中右击项目名——"属性"——"调试"——"配置文件"中选择项目名对应项——"启动"选择"项目",""应用程序参数先不填,这个后面会用到。
- 添加启动参数
要想指定地址和端口启动,我们可以用硬编码;也可以读取Json配置;也可以像我一样,在程序启动时传入参数。下面介绍如何通过重写Program.cs来读取程序的启动参数。
可以删除CreateHostBuilder方法,并填加如下方法:
- public static IWebHost BuildWebHost(string[] args)
- {
- var config = new ConfigurationBuilder()
- .AddCommandLine(args)
- .Build();
- string ip = config["ip"];
- string port = config["port"];
- Console.WriteLine($"ip={ip}:port={port}");
- return WebHost.CreateDefaultBuilder(args)
- .UseStartup<Startup>()
- .UseUrls($"http://{ip}:{port}")
- .Build();
- }
修改Main方法为:
- public static void Main(string[] args)
- {
- BuildWebHost(args).Run();
- }
在项目"属性"页——"调试"选项卡——"应用程序参数"中填写相应参数,例如我这里填写"—ip 127.0.0.1 –port 8000"。
在调试按钮的下拉选项中选择项目名。
到此,按F5或Ctrl+F5启动调试,浏览器会跳转到我们指定的地址和端口。
- 添加数据库
官方教程并没有给出添加MySQL的实例,但其过程和SQL Server是一样的。
- 准备工作
添加NuGet包:在"程序包管理器控制台"中键入:
dotnet add package MySql.Data.EntityFrameworkCore --version 8.0.18
我并没有使用Pomelo库,而用的是MySQL官方库,截止到当天是8.0.18。
创建如下几个目录:
Data——用来存放数据库上下文等数据文件
Models——用来存放数据模型
- 创建模型
在Models目录下创建与数据库匹配的数据模型TestModel.cs。如要指定主键,可以用[Key]属性在模型中指定。
- using System;
- using System.ComponentModel.DataAnnotations;
- namespace LRMS.Server
- {
- public class TestModel
- {
- [Key]
- public int uid { get; set; }
- public string username { get; set; }
- public string password { get; set; }
- }
- }
- 创建数据库上下文
在Data目录下创建数据库上下文TestDbContext.cs。在上下文中使用EF Core中的DbSet类型创建对应的与数据表名称(可忽略大小写)相应的实例。
- using Microsoft.EntityFrameworkCore;
- namespace LRMS.Server
- {
- public class UserInfoDbContext : DbContext
- {
- public UserInfoDbContext(DbContextOptions options) : base(options) { }
- public DbSet<TestModel> User_Login { get; set; }
- }
- }
- 添加数据库连接字
打开在工程的根目录下的appsettings.json。替换以下对象:
- {
- "ConnectionStrings": {
- "连接字名称": "Server=数据库地址;uid=数据库账户;pwd=数据库密码;database=数据库Schema;charset=utf8;SslMode=None;",
- },
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- },
- "AllowedHosts": "*"
- }
打开Startup.cs,在CoinfigureServices方法中添加如下代码:
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllers();
- services.AddDbContext<UserInfoDbContext>(options =>
- {
- options.UseMySQL(Configuration.GetConnectionString("连接字名称"));
- });
- }
到此,数据库的使用部分结束了。
- 后续
为了安全,防止泄漏,在控制器中我们并不能直接使用数据库上下文,下面的代码展示了一种简单的处理。
- // 创建私有、只读的数据库上下文实例
- private readonly UserInfoDbContext _db;
- // 构造函数中为其赋值
- public UserLoginController(UserInfoDbContext db)
- {
- _db = db;
- }
以上。
.Net Core 3.0 WebAPI && MySQL 8.0搭建详情的更多相关文章
- docker安装MySQL 8.0及初始化错误处理
Preface Several days ago,I've implement a docker environmnet,I'm gonna Install a MySQL 8. ...
- MySQL与MariaDB核心特性比较详细版v1.0(覆盖mysql 8.0/mariadb 10.3,包括优化、功能及维护)
注:本文严禁任何形式的转载,原文使用word编写,为了大家阅读方便,提供pdf版下载. MySQL与MariaDB主要特性比较详细版v1.0(不含HA).pdf 链接:https://pan.baid ...
- Nacos使用 MySQL 8.0 提示Public Key Retrieval is not allowed
原因如下(参考官网给出的连接选项): 如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥:可以在连 ...
- 记一次使用Asp.Net Core WebApi 5.0+Dapper+Mysql+Redis+Docker的开发过程
#前言 我可能有三年没怎么碰C#了,目前的工作是在全职搞前端,最近有时间抽空看了一下Asp.net Core,Core版本号都到了5.0了,也越来越好用了,下面将记录一下这几天以来使用Asp.Net ...
- ASP.NET Core 3.0 WebApi 系列【2】.Net Core 3.0+ CodeFirst + MySql 实现数据的迁移
写在前面 在前一小节中,我们创建了基于RESFULL风格的服务.这个小节,尝试使用CodeFirst+MySql 的方式实现数据迁移. 一.开发环境 [1]运行环境:win10 家庭版 [2]开发工具 ...
- ASP.NET Core 3.0 WebApi 系列【1】创建ASP.NET Core WebApi 项目
目录 写在前面 一.运行环境 二.项目搭建 三.测试 API 四.基础知识 五.写在最后 写在前面 C#语言可以创建RESTful服务,被称作WebApi.在这里总结学习使用支持创建.读取.更新.删除 ...
- .net core 2.0 webapi部署iis操作
1.安装 .net core 2.0 runtime, (dotnet-runtime-2.0.7-win-x64.exe) https://www.microsoft.com/net/downloa ...
- asp.net core 2.0 webapi集成signalr
asp.net core 2.0 webapi集成signalr 在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.N ...
- ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...
随机推荐
- odoo10学习笔记十六:定时任务
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189382.html 一:定义定时器数据模型 模型中定义需要用到的字段.定时方法 from odoo im ...
- C语言杂
atof——把字符串转化成浮点型 C语言标准库 头文件: #include <stdlib.h> 定义函数:double atof(const char *nptr); #include ...
- 阅读高翔的RGBD-SLAM博文笔记
目录 高翔的RGBD-SLAM笔记 前端VO: 后端优化 高翔的RGBD-SLAM笔记 RGBD相机的特点: 使用RGBD相机中的深度这一维信息,以及相机的针孔成像模型,相机的内参,可以将二维点恢复成 ...
- 使用Lambda解决_inbound_nodes错误
Keras出现了下面的错误: AttributeError: 'NoneType' object has no attribute '_inbound_nodes' 原因是使用了Keras backe ...
- 04.UTXO:未使用的交易输出,比特币核心概念之一
在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...
- 201871020225-牟星源《面向对象程序设计(java)》第十周学习总结
201871020225-牟星源<面向对象程序设计(java)>第十周学习总结 博文正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu- ...
- zzL1和L2正则化regularization
最优化方法:L1和L2正则化regularization http://blog.csdn.net/pipisorry/article/details/52108040 机器学习和深度学习常用的规则化 ...
- NOIP 2002 产生数
洛谷 P1037 产生数 https://www.luogu.org/problemnew/show/P1037 JDOJ 1298: [NOIP2002]产生数 T3 https://neooj.c ...
- CSS中@support的用法 及其calc、media用法
背景: 一次偶然的机会遇到一个朋友在刷css的库其中有这样一道题(css变量如何定义,calc, support, media),我看一眼熟悉而陌生,知其一而不知其二,叔可忍婶不可忍,马上就度娘起来, ...
- 7.18 NOIP模拟测试5 星际旅行+砍树+超级树
T1 星际旅行 题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案.本质不同:当且仅当至少存在一条边经过次数不同. 题解:考试的时候理解错题,以为他是 ...