iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0

正文

我預計做的是一個很簡易的post/get application,而目前只預計會有4隻極度簡陋的API

  • HttpGet-文章清單
  • HttpGet-文章內容
  • HttpPost-新增文章
  • HttpPost-新增使用者

其中HttpPost,將只會限縮在內網(預計使用postman/swagger,前端實在有點障礙),所以對外只會有兩個公開的GET API,權限的部分我就全部省略了(耶),table schema也只會預計有下列這兩張


圖片產自sqldbm

接著安裝vscode
安裝dotnet core 5.0 sdk

dotnet new WebAPI -o homelabAPI
dotnet add package Microsoft.EntityFrameworkCore --version 5.0.9
dotnet add package Npgsql --version 5.0.7
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 5.0.7

把上面的Table定義成Class Model,設定相關的DBContext與Connection String。

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace homelabAPI
{
    public class Posts
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid PostID { get; set; }
        [MaxLength(50)]
        [Required]
        public String Title { get; set;}
        public String Content { get; set; }
        [MaxLength(50)]
        public String Tag { get; set; }
        [Required]
        public DateTime CreateTime { get; set; }
        [Required]
        public DateTime ModifyTime { get; set; }
        [Required]
        public Guid UserID { get; set; }
        [ForeignKey("UserID")]
        public Users Users {get; set;}
    }
}

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace homelabAPI
{
    public class Users
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid UserID { get; set; }
        [MaxLength(20)]
        public String Name { get; set; }
        [Required]
        public DateTime CreateTime { get; set; }
        [Required]
        public DateTime ModifyTime { get; set; }

    }
}
using Microsoft.EntityFrameworkCore;
namespace homelabAPI
{
    public class BloggerContext : DbContext
    {
        public  BloggerContext(DbContextOptions<BloggerContext> options): base(options)
        {

        }

        public  DbSet<Posts> Posts {get; set;}
        public  DbSet<Users> Users {get; set;}

    }
}

於startup中註冊DBContext的DI服務(預設Lifetime為scope),appsettings放入連線字串。

services.AddDbContext<BloggerContext>(options => options.UseNpgsql("name=ConnectionStrings:DefaultConnection"));

用Code First來把table建起來(先安裝對應的工具才能執行dotnet ef相關指令)

dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate -c BloggerContext
dotnet ef database update

使用pgadmin來看看是不是真的建立成功。

明天就可以來寫個簡單的API了,順便一併上傳git repo。

閒聊

很久沒寫這些東西了,這次算是簡單的複習了一下。過去IDE的部分都是使用Visual Studio開發,更為無腦簡單。且2-3年前其實也有試著用VS Code開發過 .NET Core 2.0,但實在是有點障礙,不過今時今日試著弄了一下發現比當初友善了好多,Extensions也相當完善,倒是沒有當初那種強烈的障礙感了~

Reference


上一篇
Day02,先來建個開發資料庫好了。
下一篇
Day04,弄幾隻API
系列文
HomeLab 30天,胡搞瞎搞亂弄一通。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言