初學.net5,不想下載vs,就想用手頭的vs code擼一下restful api,而且數據庫選用mysql(由於便宜,方便),可是在連接數據庫的時候遇到了很多坑,此文只簡單記錄一下。php
創建.net 5程序,首先要下載.net 5 sdk。在vs code編寫.net 5的程序,則要安裝c#等擴展,如下是一個大佬寫的,比較詳細,按照這個步驟便可。html
點這裏mysql
在安裝好初步的環境後,就是建立restful api。是在目標文件夾下,在終端內輸入:web
dotnet new webapi 或者 dotnet new webapi -o 指定文件夾 命令sql
而後你會發現相關項目文件就被這麼建立好了。圖片就不上了,本身看。數據庫
而後,要給vs code安裝nuget擴展包,nuget是管理.net core程序擴展包的程序,相似於php的composer或者js的npm。npm
在vs code插件市場裏搜索安裝一下很簡單的就安裝上了。json
安裝好後,按ctrl+shift+p,輸入NuGet Package Manager:Add Packagec#
再輸入Pomelo.EntityFrameworkCore.MySqlapi
而後選擇版本號。
此文選用的是pomelo寫的程序集來連接mysql。固然還能夠選擇其餘的。
筆者比較蠢,在這個問題上糾結了好久,其實主要是將依賴版本當作了.net版本。沒能屢清楚.net 5 .net core 和entity framework core等的關係。而其實這裏的版本號是指的entity framework的版本號。
Entity Framework Core 是適用於 .NET 的新式對象數據庫映射器。 它支持 LINQ 查詢、更改跟蹤、更新和架構遷移。 EF Core 適用於不少數據庫,包括 SQL 數據庫(本地和 Azure)、SQLite、MySQL、PostgreSQL 和 Azure Cosmos DB。
以上摘自微軟官方。
因此,要選擇連接mysql的程序集,就要選擇安裝相關依賴版本的entity framework,不然就會報錯。
在安裝好環境後,修改appsettings.json以下:
{
"ConnectionStrings": { "DefaultConnection": "server=ip address;userid=test;pwd=password;port=3306;database=dotnet_test;sslmode=none;CharSet=utf8;" },
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
而後修改startup.cs,個人理解是入口文件。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Threading.Tasks;
5 using Microsoft.AspNetCore.Builder;
6 using Microsoft.AspNetCore.Hosting;
7 using Microsoft.AspNetCore.HttpsPolicy;
8 using Microsoft.AspNetCore.Mvc;
9 using Microsoft.Extensions.Configuration;
10 using Microsoft.Extensions.DependencyInjection;
11 using Microsoft.Extensions.Hosting;
12 using Microsoft.Extensions.Logging;
13 using Microsoft.OpenApi.Models;
14 using Microsoft.EntityFrameworkCore;
15 using Pomelo.EntityFrameworkCore.MySql.Infrastructure; 16 using webapi.Models;
17
18 namespace webapi
19 {
20 public class Startup
21 {
22 public Startup(IConfiguration configuration)
23 {
24 Configuration = configuration;
25 }
26
27 public IConfiguration Configuration { get; }
28
29 // This method gets called by the runtime. Use this method to add services to the container.
30 public void ConfigureServices(IServiceCollection services)
31 {
32
33 string connectionString = Configuration.GetSection("ConnectionStrings").GetSection("DefaultConnection").Value; 34 // Replace "YourDbContext" with the name of your own DbContext derived class. 35 services.AddDbContextPool<AppDb>( 36 dbContextOptions => dbContextOptions 37 .UseMySql( 38 // Replace with your connection string. 39 connectionString, 40 // Replace with your server version and type. 41 mySqlOptions => mySqlOptions 42 .ServerVersion(new Version(5, 7, 31), ServerType.MySql) 43 .CharSetBehavior(CharSetBehavior.NeverAppend) 44 ) 45 ); 46
47 services.AddControllers();
48 services.AddSwaggerGen(c =>
49 {
50 c.SwaggerDoc("v1", new OpenApiInfo { Title = "webapi", Version = "v1" });
51 });
52 }
53
54 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
55 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
56 {
57 if (env.IsDevelopment())
58 {
59 app.UseDeveloperExceptionPage();
60 app.UseSwagger();
61 app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "webapi v1"));
62 }
63
64 app.UseHttpsRedirection();
65
66 app.UseRouting();
67
68 app.UseAuthorization();
69
70 app.UseEndpoints(endpoints =>
71 {
72 endpoints.MapControllers();
73 });
74 }
75 }
76 }
再創建個models文件夾,新建一個數據庫上下文文件,固然這個文件也能夠放在根目錄,請根據本身的習慣設置。我是在models文件夾下創建了appDb.cs文件。
using Microsoft.EntityFrameworkCore;
namespace webapi.Models
{
public class AppDb : DbContext
{
public DbSet<test> test { get; set; } //建立實體類添加Context中,個人表只有test這一個哦
public AppDb(DbContextOptions options) : base(options)
{
}
}
}
再在models下創建數據表的model文件TestModels.cs。(數據庫和表請本身建立,這裏略去了。)
using System.ComponentModel.DataAnnotations;
namespace webapi.Models
{
public class test
{
[Key]
public int id { get; set; }
[MaxLength(20)]
public string name { get; set; }
[MaxLength(300)]
public string content { get; set; }
}
}
最後是在controllers文件夾下創建控制器文件TestControllers.cs
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using webapi.Models;
namespace webapi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
private readonly AppDb _db;
public TestController(AppDb db)
{
_db = db;
}
// GET api/test
[HttpGet]
public List<test> Get()
{
return _db.Set<test>().ToList();
}
}
}
最後,按ctrl+f5進行調試。
在地址後輸入/api/controller/action,action和controller本身定。能夠看到,數據讀取成功。