[C#] Json Compare/Diff 解決方案

現在的工作大都是使用微軟內建的 Json 序列化套件 System.Text.Json,為什麼要用可以參考 黑大這一篇,在尋求 Json Compare/Diff 解決方案時大都是看到 Newtonsoft(Json.NET) 的 JsonDiffPatch 做法,經同事分享 System.Text.Json 已經有人實作出來了,知道後立馬套用

...繼續閱讀 »

[ASP.NET Core 6] 讓你的 ASP.NET Core Web API + Swashbuckle.AspNetCore 支援多個版本

一旦 Web API 部署並開始使用後,它應該是可靠的,並且不應該因任何原因而中斷。另一方面,隨著需求的變化,我們需要更新 Web API 代碼,但這應該不破壞目前 API 的情況下完成,因此新舊版本的 Web  API 都將處於活動狀態,功能也要正常。這時候就要靠 Web  API 版本控制,我們靠它用於處理不同版本的Web  API。微軟的   Microsoft.AspNetCore.Mvc.Versioning 可以讓我們輕易的完成此項目,但我在整合到 Swagger UI / Swashbuckle.AspNetCore 的時候碰到了一些關卡,所幸順利的解決了,以下是我的實作筆記。

 

...繼續閱讀 »

自訂追蹤物件變化再透過 EF Core 存到資料庫

前面幾篇使用 ChangeTracking 來幫我們追蹤物件狀態,但他必須公開狀態讓外部可以修改,為了解決不被外部隨意修改的問題,可以利用深複製回傳一份不同實例的物件,這樣就可以不被外部影響;操作資料庫仍是使用 EF / EF Core,當然這不受限,你可以挑選妳喜歡的控制方式,接著,來看看怎麼實現它吧。

...繼續閱讀 »

如何使用 ChangeTracking 追蹤物件變化再透過 EF Core 存到資料庫

上一篇提到了 ChangeTracking + EFCore.BulkExtensions.BatchUpdate,可以很輕易的幫我們產生出有異動的 Update SQL 語法,如何使用 ChangeTracking 追蹤物件變化再透過 EFCore.BulkExtensions 存到資料庫 

很可惜的是 EFCore.BulkExtensions.BatchUpdate 沒有支援異動多張資料表,對於資料庫命令的往返會隨著異動的資料表而增加,這次我想要改使用 EF Core 原生的異動追蹤。

追蹤異動變化使用 ChangeTracking ,消化異動並存放到操作資料庫則使用 EF / EF Core,當然,這不受限,你可以挑選妳喜歡的控制方式,接著,來看看怎麼實現它吧。

...繼續閱讀 »

[.NET 6] 如何優雅的關閉 .NET Core Console 應用程式

當有一個應用程序被用戶 ( SIGINT /Ctrl+C) 或 Docker ( SIGTERM / docker stop ) 停止時,它需要優雅地關閉一個長時間運行的工作;換句煥說,當應用程式收到關閉訊號的時候,要把工作做完,應用程式才可以關閉。微軟的 Microsoft.Extensions.Hosting 可以幫我們接收/處理關閉訊號,我們只需要告訴它要怎麼做就可以了,我在實作的過程當中,碰到了一些問題,以下是我的心得

 

...繼續閱讀 »

如何使用 .NET Generic Host for Microsoft.Extensions.Hosting

.NET Generic Host 是 .NET Core 發展出來的基礎建設,可以和其他類型的 .NET 應用程式搭配使用例如背景服務的主控台應用程式,Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder 靜態方法,它來自於  Microsoft.Extensions.Hosting.dll,主要用來提供應用程式一個標準的啟動,包含注入、紀錄、組態,不同的應用程式框架 (HostService) 有不同的預設啟動設定,.NET Generic Host 讓我們的應用程式的生命週期的控制,啟動到結束的撰寫方式統一了。
 

...繼續閱讀 »