當我們在實作簡訊發送平台的時候,必定會用到資料庫來存取資料,像是一些簡訊排程、簡訊明細等的資料,而在資料庫的選擇上,最常聽到的就有MySQL、MS SQL Server、PostgreSQL以及Oracle,而最常被拿來跟PostgreSQL比較的就是MySQL,因為這兩者都是屬於開放原始碼(Open Source),另外如果是以Microsoft Visual Studio來建立ASP .NET Core專案,預設會是使用MS SQL Server,當然依需求也可以自行使用其他資料庫,而這邊將介紹在ASP .NET Core專案中如何設定連接PostgreSQL。
簡單介紹PostgreSQL
- 和MySQL一樣屬於免費的開源軟體,不同的是MySQL只有在使用特定儲存引擎時才符合ACID 標準,PostgreSQL則是完全符合ACID。
(註:ACID是指資料庫管理系統(DBMS)所必須具備的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))
- 設計多以商業方面的應用為主,適合資料分析的應用。
- 支援Materialized Views以及Temporary Tables。
- 支援多種語言,例如C / C ++、.Net、Java、JavaScript、Python…,並且有一些專用於延伸套件的功能。
- 結構較為龐大,因此不太適合小型伺服器。
- 因為PostgreSQL本身結構的關係,也因為經常應用在商業方面的系統,經常需要執行一些較為複雜的查詢,因而有可能導致效能降低。
實作於.NET Core 3.1連接PostgreSQL
1. 首先開啟Visual Studio 2019、並建立一個新專案,這邊選擇ASP .NET Core Web應用程式,並選取.NET Core 3.1的Web應用程式(模型-檢視-控制器)(MVC),驗證的部分則更改為個別使用者帳戶,步驟如下圖所示:
2. 專案建立完成後,將Data底下的Migrations資料夾刪除(後面更新資料庫時會自動新增),以及移除相依性-套件中的SqlServer套件(因為我們要使用的是PostgreSQL而不是MS SQL Server,因此這個套件可以移除):
3. 接著安裝PostgreSQL的NuGet套件,在管理NuGet套件的地方點選瀏覽,搜尋Npgsql.EntityFrameworkCore.PostgreSQL並安裝(需選擇有支援.NET Core 3.1的版本,這邊以v3.1.4為例),安裝完成後點選已安裝的地方檢查是否套件都有支援.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”
5. 更新完連線字串之後,更改Startup.cs中的設置(UseNpgsql),如下圖所示:
6. 接下來可以先新增想要在PostgreSQL中Create的Table,首先新增一個Model,並選擇一個當作primary key,然後到ApplicationDbContext.cs中新增DbSet來定義剛才的Model:
7. 接著便可開始連接更新PostgreSQL,打開套件管理器主控台,輸入以下NuGet命令來更新資料庫:
(1) Add-Migration FirstMigration (名稱自訂)
(2) Update-Database
8. 待執行完成後便可到資料庫查看是否有更新成功,Refresh後便可看到剛才建立的Table(這邊為testDataBase底下的Employees資料表),並且可以看到ASP.NET Core MVC Identity相關的Table也跟著建立了:
9. Controller中可透過以下方式取得資料庫中的資料:
10. 最後附上簡易的CRUD語法:
-Create
-Read
-Update
-Delete
Reference
- https://www.tutlinks.com/asp-net-core-3-angular-identity-server-postgresql/
- https://faq.postgresql.tw/postgresql-vs-mysql-vs-sql-server-vs-oracle
- https://code-maze.com/configure-postgresql-ef-core/
- https://ithelp.ithome.com.tw/articles/10206222