ASP.NET Core MVC - 使用 Heroku 的 PostgreSQL

Posted on 2018-12-13

前面文章 ASP.NET Core MVC + Heroku 已經把 .NET Core MVC 的專案放到 Heroku 了,現在要使用它所提供的免費 PostgreSQL,雖然免費的限制資料數量為 10,000 筆,不過如果是小型專案的話基本上已經夠用了,可以看一下 Heroku 的介紹

Heroku CLI 建立

  • 先進到之前的專案資料夾,就可以使用 Heroku 的 cli 來建立 Database
heroku addons:create heroku-postgresql:hobby-dev

  • 建立完成之後可以看一下相關的資訊
heroku pg:info

  • 可以直接透過 cli 拿到相關的連線資料
heroku pg:credentials:url DATABASE

Heroku 畫面建立

  • 來到 Resources Tab,在下方 Add-ons 的地方搜尋 Postgres,點 Heroku Postgres 安裝

  • 選擇 Hobby Dev - Free 然後按 Provision

  • 看到畫面下方出現 Heroku Postgres :: Database 就代表建立好了,可以點進去

  • 會另開新分頁顯示 Database 的相關資訊

  • 可以點 Settings Tab,點開 View Credentials,可以在下面看到相關的連線資訊

使用 DataGrip 連接

  • 按照前面畫面上的資料,依序填入

  • 點選 Advanced Tab,找到 sslmode,把 Value 改成 require

  • 回到 General Tab,點 Test Connection 應該會出現 Successful

使用 ASP.NET Core MVC 連接

  • 在這裡會使用到之前上傳到 Heroku 的專案,然後相關的使用方式也可以參考之前的文章 ASP.NET Core MVC - EF Core 使用 PostgreSQL,這邊只講不一樣的地方

  • UseNpgsql 裡面需要多一個參數 OptionBuilder,裡面需要呼叫 RemoteCertificateValidationCallback 然後直接回傳 true

services.AddDbContext<AppDbContext>(options =>
{
	options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"), optionBuilder =>
	{
		optionBuilder.RemoteCertificateValidationCallback((sender, certificate, chain, errors) => true);
	});
});
  • 在 Connection 的地方,最後需要多一個參數 SslMode=Require;,需要注意的是大小寫必需要一樣,不然會有問題
{
	"ConnectionStrings": {
		"DefaultConnection": "Server=aws.com;Port=5432;Database=db;UID=user;PWD=password;SslMode=Require;"
	}
}