Day03,Model摸象

正文

我预计做的是一个很简易的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


<<:  Transactions (3-1) - Weak Isolation Levels - Read Committed

>>:  【D3】建立MySQL资料库

不容小觑的数据分析工具 - Excel:枢纽分析表

Excel除了有强大的函数可以使用外,还有一个不容小觑的工具:枢纽分析表。他可以快速帮你整并相关资料...

【设计+切版30天实作】|Day20 - Navigation bar - 打破预设的navbar排版

大纲 昨天完成了header的下半部分,今天的任务就要来完成header的上半部分 —— Navig...

Day 14 | 魔术方块AR游戏开发Part3 - 面的旋转(上)

在上一篇我们完成了魔术方块的侦测,今天我们要来制作面的旋转。 目录 选择的面 面的旋转 选择的面 建...

大家好~

大家好~ 在接下来30天的文章中 我想与大家分享 工作所学 以及学习一些新的东西,例如像是Azure...

[Day1] 何谓自然语言处理

其实google的话就会有很多相关自然语言处理的定义与文章,自然语言处理英文为Natural Lan...