.net 5 用vs code連接mysql體驗

初學.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本身定。能夠看到,數據讀取成功。

相關文章
相關標籤/搜索