# .NET ## 介紹 ### 目前都以.NET6去做開發,有以下特點 * 簡化的開發:非常容易上手。 C# 10中的新語言功能可減少您需要撰寫的程式碼數量。 對 Web 堆疊和最少 API 的投資,可讓您輕鬆快速寫入較小且更快速的微服務。 * 效能較佳:.NET 6 是最快的完整堆疊 Web 架構,如果在雲端中執行,則可降低計算成本。 * 極致生產力:.NET 6 和 Visual Studio 2022 會提供熱重新載入、新 Git 工具、智慧型程式碼編輯、強固診斷和測試工具,及更好的小組共同作業。 ### 講建立專案的部分前,先看過Enity Framework core 與 LinQ ## ## Enity Framework core ### 是一個ORM框架,可以大幅減少使用SQL語法,且透過強型別取得與操作物件資料 #### 建立連線 ``` private readonly SqlContext _context; public Test_0612_01Controller(SqlContext context) { _context = context; } ``` #### 新增資料 ``` _context.表名稱.Add(遇新增的資料); ``` #### 刪除資料 ``` _context.表名稱.FindAsync(id); ``` #### 儲存變更 ``` _context.SaveChangesAsync(); ``` #### 搜尋資料 ##### 全部資料 ``` _context.表名稱.ToListAsync(); ``` ##### 指定資料 ``` _context.表名稱.FindAsync(id); ``` ##### 條件式資料 ``` _context.表名稱.Where(L=>L.條件式); ``` ## ## LinQ(音link) ### 一種數據查詢語言,被廣泛應用於C#中 ### 對做API來說,常常需要針對不同資料做提取,這邊使用LinQ會方便很多 #### 查詢表名稱內所有資料 ``` from c in _context.表名稱 select c ``` #### 查詢表名稱符合條件A的資料 ``` from c in _context.表名稱 where 條件A select c ``` #### 查詢表名稱內所有資料並由小至大 ``` from c in _context.表名稱 orderby 欄位名 select c ``` ## ## VS2022 ### 安裝 [下載連接](https://visualstudio.microsoft.com/zh-hant/vs/compare/) ### 下載後,若單純架設網站選擇ASP.NET 與 Node.js(之後寫Vue會用到) ### 若需要維護Winform 或是WPF 則選擇.NET桌面開發 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%871.png) ### 若需要快速建立,則直接使用我提供的DEMO去做開發 ## # ASPNET ### 建立新專案 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%872.png) ### 選擇版本 (這邊以.NET6做教學 目前最新的.NET8) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%873.png) ### 啟動 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%874.png) ### 安裝套件包(NuGet) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%875.png) ### 設定資料庫連線 #### 於appsettings.json 中加入 ``` //連接MYSQL "ConnectionStrings": { "tarefasConnection": "server=140.125.21.65;port=3307;uid=VIP125;pwd=@VIPvip125;database=VIP125" } ``` ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%876.png) #### 於Program.cs中加入設定 ``` builder.Services.AddDbContext(opt => { string connectionString = builder.Configuration.GetConnectionString("tarefasConnection"); var serverVersion = ServerVersion.AutoDetect(connectionString); opt.UseMySql(connectionString, serverVersion); }); ``` ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%877.png) ### 建立與資料庫table的連線 #### 創建Model 建議將創建的Model名稱第一個字大寫,資料庫內部資料表名用小寫,這樣較好對比 Model內容需要跟資料表的欄位名稱相對應 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%879.png) #### 創建Services Haskey指的是不會重複的 像是身份證字號這種的就不會重複 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%878.png) ### 創建控制器 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8710.png) ### 創建出來的頁面 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8711.png) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8712.png) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8713.png) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8714.png) ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8715.png) ## # WEBAPI ### 建立新專案 ### 基本上都與ASPNET相同,就這部分要注意 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8717.png) ### 連接資料庫的方式都與ASPNET一樣,這邊只是將ASPNET中的MVC去除View去更專注在後端,這邊建立控制器的方式也有點不同 ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8718.png) ### 其餘的就好好看先前提到的ORM框架與LINQ,去構建出API即可 ### 運行之後: ![](http://140.125.21.65:8418/Education/Backend/raw/branch/master/C_shape/img/%E5%9C%96%E7%89%8719.png)