微軟在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;
- }
以上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/116632.html
標籤:C#
上一篇:C#--Oracle資料庫基本操作(增、刪、改、查)
下一篇:解讀C#中的正則運算式
