30 天從後端開始學 GIS — Day 19

你好,我是 PostgreSQL — 3 Npgsql With .NET

最後在進入小專案之前,會分別介紹要如何在 .NET 和 .NET Framework 中和 PostgreSQL 進行溝通。這邊會選擇使用 Entity Framework 作為溝通的方法,介紹如何搭配 Npgsql 來和資料庫做連線。

EntityFrameworkCore

首先要介紹的是相對單純的 NET。因為沒有支援特殊的檔案格式 .edmx,不需要特別使用 Visual Stadio 才能使用,因此示範的 IDE 會是 Rider。以下是要安裝的 Nuget 套件:

第二個套件的用途是讓我們可以利用 CLI 和資料庫建立連線,並且將 Tables 自動轉換成相對應的物件。第四個套件則是讓我們可以使用 NetTopologySuite 的型別,接取資料庫中型別為 geometry 的資料。

建立資料

這裡要使用的是 DB First 的方式,將資料引入,另外也有使用 Code First 的開發方式,但這裡就不贅述。

-- 第一次使用 EF CLI 的話請先安裝
-- dotnet tool install --global dotnet-ef
dotnet ef dbcontext scaffold "Host=localhost;Database=db_with_postgis;Username=postgres;Password=0000;" Npgsql.EntityFrameworkCore.PostgreSQL -o ./Models/Db -c MyContext -f

這裡有幾個參數要輸入:

  1. 連線資訊:雙引號內的部分,包含主機、資料庫名稱、登入的使用者名稱和密碼,如果沒有特別設定的話,預設的使用者會是 postgres,密碼則是安裝流程中輸入的那一組
  2. 連線的套件名稱:也就是上面安裝的套件中第三個,每種資料庫所輸入的名稱會略有不同
  3. -o:指定生成的物件位置,不存在的話就會自動建立
  4. -c:指定生成的 DbContext 名稱
  5. -f:是否複寫之前的檔案

設定 Program.cs

如果要使用 NetTopologySuite 來讀取 Geometry 類型的話,要記得在設定的地方加上 UseNetTopologySuite()

builder.Services.AddDbContext<MyContext>(options => 
options.UseNpgsql(builder.Configuration.GetConnectionString("Db"),
s => s.UseNetTopologySuite()));

這樣基本上就完成和 PostgreSQL 的連線了,後續的使用方法和一般的 EntityFramework 相同,只是你可以直接把資料庫中 Geometry 的型別接出來,做出像 ST_Within 等的操作而不需要仰賴資料庫連線。

References

--

--