使用.NET Core 3.1連接PostgreSQL資料庫

net-core-3.1

當我們在實作簡訊發送平台的時候,必定會用到資料庫來存取資料,像是一些簡訊排程、簡訊明細等的資料,而在資料庫的選擇上,最常聽到的就有MySQL、MS SQL Server、PostgreSQL以及Oracle,而最常被拿來跟PostgreSQL比較的就是MySQL,因為這兩者都是屬於開放原始碼(Open Source),另外如果是以Microsoft Visual Studio來建立ASP .NET Core專案,預設會是使用MS SQL Server,當然依需求也可以自行使用其他資料庫,而這邊將介紹在ASP .NET Core專案中如何設定連接PostgreSQL。

簡單介紹PostgreSQL

  1. 和MySQL一樣屬於免費的開源軟體,不同的是MySQL只有在使用特定儲存引擎時才符合ACID 標準,PostgreSQL則是完全符合ACID。

(註:ACID是指資料庫管理系統(DBMS)所必須具備的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))

  1. 設計多以商業方面的應用為主,適合資料分析的應用。
  2. 支援Materialized Views以及Temporary Tables。
  3. 支援多種語言,例如C / C ++、.Net、Java、JavaScript、Python…,並且有一些專用於延伸套件的功能。
  4. 結構較為龐大,因此不太適合小型伺服器。
  5. 因為PostgreSQL本身結構的關係,也因為經常應用在商業方面的系統,經常需要執行一些較為複雜的查詢,因而有可能導致效能降低。

 

實作於.NET Core 3.1連接PostgreSQL

 

1. 首先開啟Visual Studio 2019、並建立一個新專案,這邊選擇ASP .NET Core Web應用程式,並選取.NET Core 3.1的Web應用程式(模型-檢視-控制器)(MVC),驗證的部分則更改為個別使用者帳戶,步驟如下圖所示:

.NET Core 3.1 .NET Core 3.1 .NET Core 3.1

 

 

2. 專案建立完成後,將Data底下的Migrations資料夾刪除(後面更新資料庫時會自動新增),以及移除相依性-套件中的SqlServer套件(因為我們要使用的是PostgreSQL而不是MS SQL Server,因此這個套件可以移除):

.NET Core 3.1 .NET Core 3.1

 

 

3. 接著安裝PostgreSQL的NuGet套件,在管理NuGet套件的地方點選瀏覽,搜尋Npgsql.EntityFrameworkCore.PostgreSQL並安裝(需選擇有支援.NET Core 3.1的版本,這邊以v3.1.4為例),安裝完成後點選已安裝的地方檢查是否套件都有支援.NET Core 3.1(目前只有建立專案時自動安裝的套件,因建立專案時選擇.NET Core 3.1,所以預設的套件應該都有支援):

.NET Core 3.1 .NET Core 3.1

 

 

4. 安裝完成後開始設定連線字串(Connection string),在appsettings.json中找到ConnectionStrings,並將DefaultConnection更改為以下的字串格式:4. 安裝完成後開始設定連線字串(Connection string),在appsettings.json中找到ConnectionStrings,並將DefaultConnection更改為以下的字串格式:“Server=localhost;Port=5432;Database=yourDataBase;User Id=yourUseId;Password=yourPassword”

.NET Core 3.1

 

 

5. 更新完連線字串之後,更改Startup.cs中的設置(UseNpgsql),如下圖所示:

.NET Core 3.1

 

 

6. 接下來可以先新增想要在PostgreSQL中Create的Table,首先新增一個Model,並選擇一個當作primary key,然後到ApplicationDbContext.cs中新增DbSet來定義剛才的Model:

.NET Core 3.1 .NET Core 3.1

 

 

7. 接著便可開始連接更新PostgreSQL,打開套件管理器主控台,輸入以下NuGet命令來更新資料庫:
(1) Add-Migration FirstMigration (名稱自訂)
(2) Update-Database

.NET Core 3.1

.NET Core 3.1 .NET Core 3.1

 

 

8. 待執行完成後便可到資料庫查看是否有更新成功,Refresh後便可看到剛才建立的Table(這邊為testDataBase底下的Employees資料表),並且可以看到ASP.NET Core MVC Identity相關的Table也跟著建立了:

.NET Core 3.1

 

 

9. Controller中可透過以下方式取得資料庫中的資料:

.NET Core 3.1

 

 

10. 最後附上簡易的CRUD語法:

-Create

.NET Core 3.1

 

-Read

.NET Core 3.1

 

-Update

.NET Core 3.1

 

-Delete

.NET Core 3.1

 

 

Reference

  1. https://www.tutlinks.com/asp-net-core-3-angular-identity-server-postgresql/
  2. https://faq.postgresql.tw/postgresql-vs-mysql-vs-sql-server-vs-oracle
  3. https://code-maze.com/configure-postgresql-ef-core/
  4. https://ithelp.ithome.com.tw/articles/10206222

 

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料