ASP.NET Core MVC with PostgreSQL via EF Core

  • 1655
  • 0
  • 2020-06-12

紀錄專案建置過程

原本是打算採用.NET Core Web API + 原生HTML和JS

專案都建好了才想到,如果都用.NET Core了,何不直接用MVC...

 

雖然 EF Core 推薦以程式定義資料型別,再產生 SQL Script (Code-First) ,但在這次的專案我還是先弄了資料庫才反向倒回程式

所以這邊會紀錄的是 Database-First 的資料庫和專案建立流程

 


 

好,首先來處理一下資料庫。

因為我的專案和資料庫都想建置在 Heroku 上面,它有提供免費方案的資料庫是 PostgreSQL。

免費方案當然有些限制,要注意的是它的資料一共只能存一萬筆
詳細方案及費用說明

首先,在 Heroku 建立本專案的 APP。

要建置資料庫需要透過 Heroku 的擴充元件:Heroku Postgres。

從 APP 頁面 > Resources > Add-ons 搜尋 Heroku Postgres > 選擇方案 > Provision

元件安裝完成後會看到這個畫面

點 Heroku Postgres 後就可以看到資料庫相關的資訊 Dashboard,包含連線數、資料數等等

Settings > Database Credentials > 選 View Credentials 可以展開,這裡會顯示你的 DB 連線資訊,等等會用到

有了連線資訊你可以自己挑一種 GUI 來操作資料庫,我是選擇 pgAdmin。

我建完資料庫後,當天晚上收到了Heroku的資料庫維修通知。
維修完之後,DB的連線資訊全部都更改了!
不確定這種維修的頻率有多頻繁,大家只能多注意連線字串的更新方式。

 


 

搞定資料庫之後,來開新專案吧!

Visual Studio 建立新方案 > 選擇 ASP.NET Core Web 應用程式範本 > 填寫專案名稱、位置 > 建立 > Web 應用程式 (模型 - 檢視 - 控制器) or API > 建立

拿到乾淨的 .NET Core 專案之後,先安裝幾個套件

  1. Microsoft.EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore.Design
  3. Npgsql.EntityFrameworkCore.PostgreSQL
  4. Npgsql.EntityFrameworkCore.PostgreSQL.Design

你可以下指令 dotnet add package 或是用 Nuget 都無所謂 ~

 

接著要把資料庫的 Model 倒進專案中

打開命令提示字元,在專案路徑(.csproj 檔的位置)下輸入指令

$ dotnet ef dbcontext scaffold "Host=my_host;Database=my_db;Username=my_user;Password=my_pw;Sslmode=Require;Trust Server Certificate=true" Npgsql.EntityFrameworkCore.PostgreSQL -o Models

如果你是用其他資料庫的,把Npgsql.EntityFrameworkCore.PostgreSQL這個參數換成對應的套件,例如 MSSQL 就把改為放 Microsoft.EntityFrameworkCore.SqlServer

紀錄一些常用的參數

-o Models 會將實體類別那些 .cs 檔產這個路徑下

--context-dir Context  DbContext 會放置的路徑

-c TestDbContext  DbContext 的命名

-f 複寫現有檔案 (更新)

遇到無法辨識 dotnet 指令的狀況,請安裝 .NET Core SDK
遇到無法辨識 dotnet ef 指令的狀況,請使用下面指令安裝 dotnet-ef 工具(因為 .NET Core SDK 3.0 開始不再包含 dotnet ef 工具)
$ dotnet tool install --global dotnet-ef

 

 

資料參考:

EF Core 工具參考(.NET CLI)-EF Core | Microsoft Docs

反向工程-EF Core | Microsoft Docs

第 15 天:LINE BOT SDK:Heroku Postgres 資料庫

ASP.Net Core Web API 使用 Entity Framework Core 和 PostgreSQL

Getting Started | Npgsql Documentation