1. 程式人生 > >(二)3、相關數據模型(models)的創建

(二)3、相關數據模型(models)的創建

control from 如何 調試 關系 app 需要 ima cati

然後咱們再來解決Join的錯誤(你不會給忘了吧??!!)

在demo項目下新建一個名為Models的文件夾,用來放置數據模型,然後在Models目錄下新建一個名為Join類(Join可自定義),可以把這個當做MySQL裏的數據庫example

技術分享圖片

然後充實一下Join.cs的內容,如果有錯誤提示,是因為沒有添加“Microsoft.EntityFrameworkCore”,至於如何添加,上面我也說過了

技術分享圖片
using Microsoft.EntityFrameworkCore;

namespace demo.Models
{
    public class Join:DbContext
    {
        public Join(DbContextOptions<Join> options) : base(options)
        {
        }

    }
}
技術分享圖片

這時我們再返回到Startup.cs,為什麽Join那裏還是報錯呢?因為它找不到Join這個類,所以我們現在就要添加Join這個類了,方法同上,選擇“using demo.Models",然後就沒有紅色錯誤提示了

6)現在在Join.cs裏面只添加了一個構造方法,就相當於只有一個空的數據庫,裏面是沒有表的,所以接下來我們就來添加表……的映射,把當前的數據模型與數據庫的表進行一一對應。右鍵DB文件夾,添加,類,輸入Person,確認。

    再新建一個DB文件夾的原因是為了區分數據庫對應的表和在實際中遇到的表,現在可以不懂,沒關系,但這樣做是有好處的。

    但是有人又會問,為什麽這裏是Person,而不是數據庫裏的People,嗯…數據模型,簡單來說,就是存放數據庫的表的屬性的。

    有人又會問,後面的{ get; set; }是什麽,我也不是很懂,我的理解是該屬性具有讀(get)和寫(set)的權限。

    有人又會問,那我有多個表呢,我只能說,4843,當然是在DB裏面創建相應的類就好了啊

技術分享圖片

技術分享圖片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace demo.Models.DB
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Gender { get; set; }
    }
}
技術分享圖片

7)然後回到Join.cs存放數據模型(數據庫有多少表就在這裏添加多少個數據模型)

技術分享圖片
using demo.Models.DB;(沒錯啦,就是我胡漢三了)
using Microsoft.EntityFrameworkCore;namespace demo.Models
{
    public class Join:DbContext
    {
        public Join(DbContextOptions<Join> options) : base(options)
        {
        }
        public DbSet<Person> People { get; set; }
      (如果Person提示有錯,可能是沒有添加第一行)
    }
}
技術分享圖片

3、到這裏,數據庫的連接差不多就完了,下面就是來操作數據庫的數據,把數據拿出來了。

    在Controllers文件裏已經有個默認的ValuesController了,一般我的話會新建一個controller,ValuesController我一般只作為測試用,看看是否能連接到服務器。

    右鍵Controller文件夾->添加->控制器

    有人又會問,這個controller是幹嘛的,我…是不是沒看MVC就跑過來了,牛逼啊,那我就稍微說下,簡單來說,controller這部分就是一個數據中轉站,前端發送數據請求到controller,controller處理數據請求,從數據庫拿到相應的數據送到前端去。你說重不重要??!!

技術分享圖片

我一般選擇倒數第二個,可以自動生成相應的代碼

技術分享圖片

在填寫控制器名稱的時候按照規定來,以Controller結尾

技術分享圖片

添加後的界面

技術分享圖片

然而我們並不需要這麽多,刪掉多余的,就剩下這些了。

技術分享圖片
using System.Collections.Generic;using Microsoft.AspNetCore.Mvc;

namespace demo.Controllers
{
    [Produces("application/json")]
    [Route("api/Test")]
    public class TestController : Controller
    {
        // GET: api/Test
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}
技術分享圖片

然後再把“數據庫”Join拿過來,再把People拿出來。(為方便,我把上面Using那裏多余的刪去了,就好看多了,至於為什麽Join那裏還報錯,我就不用說了吧)

技術分享圖片
using demo.Models;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace demo.Controllers
{
    [Produces("application/json")]
    [Route("api/Test")]
    public class TestController : Controller
    {
        private readonly Join _Join;
        public TestController(Join join)
        {
            _Join = join;
        }
        // GET: api/Test
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}
技術分享圖片

然後我們再get方法裏改造一下(有from xx in xx select xx的地方,如果ps報錯,這裏我是用了C#集成的查詢語言Linq,如果報錯,在最上面加上using system.linq就好)

技術分享圖片
[HttpGet]
public JsonResult Get()
   {
       var ps = _Join.People;
       var q = from p in ps(即這裏報錯)
                    select p;

        return Json(q.First());
   }
技術分享圖片

然後再來測試一下我們再數據庫輸入的數據

調試->開始執行(不調試),不對啊,這不是我在數據庫插入的數據啊,別急,把values改為test就可以了,這就是controller的強大作用了

技術分享圖片

將values改為test後的樣子,是不是很神奇,這樣就把數據庫的數據取出來了

技術分享圖片

至此,webapi的基本操作到這裏就結束了。

本來我是想直接進入下一章前端Vue的,但是因為在這裏我遇到了太多的坑,不想讓大家再深陷於此,所以再來開一篇來說一下,話不多說,下一章傳送門

可能出現的問題

(二)3、相關數據模型(models)的創建