發表文章

ASP.NET Core 2 API 使用 Entity Framework Core

圖片
以下操作使用visual studio 2017

ASP.NET Core:2.0版

資料庫建立方式為Database first


建立ASP.NET Core 2 API 專案步驟可以參考這篇文章 https://greens2314.blogspot.com/2018/09/aspnet-core-2-api.html
建立資料庫資料庫名稱:Demo 資料表:Member、Items


建立資料夾,存放Entity Framework Core所產生的Class跟Context檔案於專案上按右鍵 > 加入 > 新資料夾
輸入資料夾名稱Models,名稱可以自行命名

使用Entity Framework Core建立Entity Class跟Context檔案過去使用Entity Framework的Database first會產生edmx檔案, 但Entity Framework Core沒有這種方便的功能了 比較類似Code First的方式,只能透過下指令的方式去更新物件 工具 > NuGet 封裝管理員 > 套件管理器主控台

在PM>後方輸入以下指令後,按Enter鍵Scaffold-DbContext "Server=ADMIN;Database=Demo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models




參數說明:

Scaffold-DbContext:資料庫連線字串-OutputDir :要將產生的檔案存放在哪個資料夾-Force:產生的檔案是否要覆寫現有的檔案,如果資料表有異動,這個指定一定要打
查看執行結果Models資料夾:存放由指令產生的DemoContext.cs、Items.cs與Member.csDemoContext.cs:含有兩個屬性Items與Members,後續就能以物件的方式操作資料庫資料OnConfiguring:宣告資料庫連線字串,這邊我們可以看到上一行有警告資訊,後面的補充資料會再另外說明
需要特別注意,如果有任何欄位修改,請去變動資料表的設定然後再重新下指令,指令的最後面記得加上 -Force
Scaffold-DbContext "Server=ADMIN;Database=…

使用範本建立與執行 ASP.NET Core 2 API 專案

圖片
以下操作使用visual studio 2017 建立ASP.NET Core 2 API專案 檔案 > 新增 > 專案
Visual C# > .NET Core > ASP.NET Core Web應用程式

選擇API範本
查看Controller程式碼 Controllers資料夾 > 開啟ValuesController.cs > 查看程式碼 可以由程式中觀察到第一個方法的route為 "api/values" 回傳值為一個含有values1與values2的陣列



執行專案 按下執行按鈕,或按F5
開啟瀏覽器 在網址輸入API路徑 api/values,即可查看回傳結果

其實跟建立ASP.NET MVC專案類似,
透過簡單的下一步動作,很快就可以完成專案的建立

Visual Studio 2017 讓多個專案開啟在同一個瀏覽器

圖片
簡單記錄一下今天遇到的問題

更新到15.7.3之後

發現開始偵錯時,又再次遇到開啟多個瀏覽器的問題

如下圖,當你要一次開啟多個專案時,畫面一直開新瀏覽器出來



在15.6.2版本也有遇到一樣的問題

那時候是使用以下設定排除此問題,可以將下列項目取消勾選

工具 > 選項 > 偵錯 > 一般 > 為ASP.NET啟用Javascript偵錯(Chrome、Edge及IE)

Tools > Options > Debugging > General > Enable JavaScript debugging for ASP.NET (Chrome, Edge and IE)

就可以讓多個專案開啟在同一個瀏覽器當中,透過多個標籤或分頁(Tab)去區分專案



如下圖,方案中有三個專案,在開始偵錯後,會自動開啟一個或目前使用中的Chrom瀏覽器,並將這三個專案透過分頁的方式開啟在同一個瀏覽器中




在Visual Studio 2015時就預設是將多個專案開在同個瀏覽器,只是換到2017後,預設變成開啟獨立的瀏覽器,有點無法適應,所以把這功能關閉

升級到15.7.3又出現開啟多個瀏覽器的問題,而且關閉其中一個瀏覽器,專案會停止偵錯

讓我更困擾了!找了好久終於找到設定方式

使用以下設定排除此問題,請將下列項目取消勾選

工具 > 選項 > 專案與方案  > Web 專案 > 關閉瀏覽器視窗時,停止偵錯工具

Tools > Options > Projects and Solutions > Web Projects > Stop debugger when browser window is closed



平常是用英文版的,但也把中文的部分寫一下XD

參考資料:
https://stackoverflow.com/questions/40729535/how-to-stop-browser-closing-automatically-when-you-stop-debugging-on-vs-2017


Visual Studio 自動排版格式化程式碼

圖片
在團隊開發過程中,什麼時候是程式碼瘋狂修改的階段呢,
無非就是Code Review了,有時候卡個幾天或是幾個月都是有可能的,
裡面常出現的comment,每次幾乎都會出現的就是排版的問題,
例如空白多一個少一個,括號還沒換行等等的小瑕疵,
對於心思不夠細膩的人而言,真的十分的惱人

團隊中喜歡將大括號換行,
例如:
if(true)
{
  //code
}
else
{
  //code
}

那也許有些團隊喜歡:
if(true){
  //code
}else{
  //code
}

有時候不只括號要不要換行,連else要不要換行都有各自的喜好,
所以有時候要統一使用團隊規定的喜好真的會有眼殘的時候,
自己檢查老半天可能還是有漏網之魚,
但現在不用擔心啦!
只要使用Format 格式化文件就能為你分憂解勞,
設定方式如下:
編輯 > 進階 > 格式化文件




Visual Studio會根據你的環境設定幫你自動重新排版
設定方式如下:
工具 > 選項



切換到
文字編輯器 > C# >程式碼樣式 > 格式化 > 新行

這邊可以設定很多換行的邏輯,
將對應的項目打勾跟取消勾選,下面的黑色區域會顯示排版的格式,
可根據自己或是團隊的喜好去做調整,即可自動排出你想要的格式囉!


如果覺得 編輯 > 進階 > 格式化文件 這個選項太難找到,
可以參考這篇文章,將他加入在明顯的工具列區域喔
http://greens2314.blogspot.tw/2017/09/visual-studio-2015.html


將專案加入Git版控並上傳至遠端儲存庫

圖片
假設情況:想像你們團隊目前已經有一個專案,已經開發半年了,這時候主管去外訓,得知Git版控非常的好,他想使用Git來做專案程式碼的版控讓大家一起開發,請你好好研究如何將專案加入Git版控

目的:讓團隊可以更有效率的合作開發,並了解彼此之間修改的程式碼內容

處理方式:有兩種方法來將專案加入Git版控,以下使用TortoiseGit與Bitbucket示範

1. init 儲存庫 > 上傳到遠端儲存庫 在專案資料夾內產生一個.git的資料夾,這個資料夾就是負責做版控管理的
操作方法:在資料夾空白處按右鍵,選擇Git Create repository here



不要勾選 Make it Bare,按下OK。
若勾選的話是代表這個資料夾是專門拿來做版控的儲存中心,下文會提到,將使用Bitbucket來作為Remote Repository,能讓開發成員取得同一份程式碼



資料夾會自動產生一個名稱為.git的資料夾
代表專案已經可以開始使用Git版控囉!而這個包含.git的資料夾就是版控的工作區



若沒有看到.git資料夾的話,可以檢查一下資料夾設定是否有允許顯示隱藏的項目



接下來就是將專案內的程式碼加入版控,使用Git Commit來提交一個版本



勾選要加入此版本的程式碼,此時可以瀏覽一下檔案清單,如果有看到某些檔案是不想加入版控的,可以使用.gitignore來忽略它,例如下圖的.vs資料夾會根據使用者的電腦不同而有不同的內容,所以不適合加入版控,必須忽略它。先將下圖視窗案取消



點選.vs資料夾後按滑鼠右鍵,將.vs資料夾加入ignore list



將著選取忽略的方式,
Ignore Type:
忽略檔案的方式是針對這個單一的項目,還是其他資料夾內若也有相同的項目也要一併忽略,
例如:專案每個資料夾內都有一個readme.txt檔案,
ignore item(s) only in the containing folder(s):只是想排除特定一個
ignore item(s) recursively:想忽略全部的readme.txt,git會將整個工作區內的readme.txt忽略

Ignore File:
ignore list是由一個叫做.gitignore的檔案再管理的,此選項是在問你,此檔案要自動產生在哪裡
.gitignore in the reposito…