30 天從後端開始學 GIS — Day 19
你好,我是 PostgreSQL — 3 Npgsql With .NET
Oct 2, 2022
最後在進入小專案之前,會分別介紹要如何在 .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-efdotnet ef dbcontext scaffold "Host=localhost;Database=db_with_postgis;Username=postgres;Password=0000;" Npgsql.EntityFrameworkCore.PostgreSQL -o ./Models/Db -c MyContext -f
這裡有幾個參數要輸入:
- 連線資訊:雙引號內的部分,包含主機、資料庫名稱、登入的使用者名稱和密碼,如果沒有特別設定的話,預設的使用者會是 postgres,密碼則是安裝流程中輸入的那一組
- 連線的套件名稱:也就是上面安裝的套件中第三個,每種資料庫所輸入的名稱會略有不同
-o
:指定生成的物件位置,不存在的話就會自動建立-c
:指定生成的 DbContext 名稱-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 等的操作而不需要仰賴資料庫連線。