Entity Framework Core 讓你可以透過「導覽屬性」快速的取得「關聯」資料,不過方便的背後可能會犧牲一些效能,早期在 Entity Framework 的年代,預設啟用「延遲載入」機制,這個預設值可能會導致許多意外的效能問題,以致於 "Entity Framework 很慢" 的臭名一直延續至今,即便 Entity Framework Core 已經沒有這個問題,許多初學者還是不太清楚如何正確的使用 Entity Framework Core 來存取關聯資料。這篇文章我就來說說 Entity Framework Core 提供的三種關聯資料載入策略,以及如何判斷何時該用哪種策略載入資料。
... 繼續閱讀 ...
我們在使用 .NET CLI 開發專案的時候,經常會需要安裝一些 .NET 全域工具 (.NET Global Tool),但是安裝全域工具有個小缺點,那就是這些工具會需要被註冊到 PATH
環境變數中,而且經常會有與 .NET SDK 版本不一致的問題。我在授課的時候,學員就遇過好幾次 dotnet-ef 套件跟 .NET SDK 版本不一致,導致出現靈異事件的狀況。今天這篇文章,我就來跟大家說一下如何將這些 .NET 全域工具 改裝成 .NET 本地工具!
... 繼續閱讀 ...
我們公司採用 Microsoft 365 辦公協作環境,這也意味著背後一定使用了 Azure AD 目錄服務,因此我們可以直接拿 Azure AD 作為公司的 OAuth 2.0 + OpenId Connect (OIDC) 認證與授權平台,因此開發公司內部應用程式就變的非常容易。這篇文章我將說明要將一個 ASP.NET Core 網站加入 Azure AD 的身份驗證流程,以及使用時的注意事項。
... 繼續閱讀 ...
我們在建立含有 Query String 的網址時,若是用字串串接的方式來實作,程式碼會相對的比較醜一點。從 ASP.NET Core 1.0 開始,就有好幾個專門用來建立 Query String 的類別,這些類別不但可以提升程式碼的可讀性,所有的 Query String 也都會進行必要的 URL Encode 動作,讓你的網址更符合國際標準,建議可以多加利用。
... 繼續閱讀 ...
LINQPad 有三個資料夾,預設放在使用者目錄的「我的文件」目錄下(~/Documents
),分別是 LINQPad Plugins
, LINQPad Queries
, LINQPad Snippets
這三個。為了讓我的筆電與家中電腦可以同步這些資料,我特別將這幾個資料夾移至 Dropbox 共享資料夾中,然後透過 Symbolic Link 連結回去,如此一來我就不用特別調整 LINQPad 設定,我只要調整每台電腦的資料夾與連結設定,就可以很方便的讀取到同步後的 LINQPad 完整設定與資料。
... 繼續閱讀 ...
一般來說,我們極少會在環境變數上使用小數點( .
)當成環境變數名稱來使用,但是在特定應用程式的條件下,可能被迫需要做出這樣的設定。像透過環境變數設定 .NET 應用程式的 LogLevel
就很可能會用到小數點來進行設定,本篇文章我將說明不同作業系統下的設定方式與潛在問題。
... 繼續閱讀 ...
有時候我們會希望從本機硬碟安裝 NuGet 套件,有時候則是想要安裝公司內部發行的 NuGet 套件,我發現許多人都會透過 Visual Studio 去調整全域的 nuget.config
設定檔,但這樣很容易造成你在開啟其他不同專案的時候會無法成功還原套件的情況。另一方面,我們在 CI 的環境中,若需要指定自訂的 NuGet 套件來源,通常也都是透過建立 nuget.config
的方式來指定。這篇文章我將來說明如何在方案或專案中建立 nuget.config
檔案,並將該檔案加入到版控之中。
... 繼續閱讀 ...
最近有專案需要在報表上顯示 Code 128 條碼,但負責這個功能的開發人員會遇到特定文字產生的條碼無法被掃描/辨識的問題。由於我之前沒有親手處理過 Code 128 條碼,所以藉此研究了一下 Code 128 條碼的產生過程,特別用這篇文章筆記一下整個過程。
... 繼續閱讀 ...
Serilog 是我在撰寫 .NET 應用程式時唯一推薦的 Logging 工具,基本上 Serilog 的 NuGet 套件支援 .NET Framework 4.5+ 與 .NET Core 1.0+ 版本,相容性非常高。這篇文章我打算說明在 .NET 6 完整設定 Serilog 的過程,以及在不同情境下的注意事項。
... 繼續閱讀 ...
我的 ASP.NET Core 6 開發實戰:從入門到進階 課程將在 2021/11/13 開始,就在 .NET 6.0 推出後 4 天。由於 .NET 6.0 與 C# 10 即將推出,全新的 Top-level statements 語言特性,可以大幅簡化 .NET 應用程式的啟動程式碼,這個變化自然也會影響到 ASP.NET Core 6.0 的啟動方式,許多 .NET Core 的老手看到全新的 Hosting Model (裝載模型) 可能會非常不適應,這篇文章主要用來解決大家的疑惑。
... 繼續閱讀 ...
雖然 .NET 有個 Uninstall Tool 可以用來解除安裝任何 .NET / .NET Core 版本,但是目前依然不支援 Linux 版本,可能是 Linux 生態實在是太複雜了,所以一直沒有提供好用簡便的反安裝工具。今天這篇文章我將分享幾個好用的命令,幫助你快速解除安裝現有的 .NET SDK 與 Runtime 版本。
... 繼續閱讀 ...
我在幫一個客戶 Code Review 並重構專案的時候,發現他們的專案在 Visual Studio 2019 都可以順利的建置專案,但是透過 Azure Pipelines 使用 MSBuild 建置卻會編譯失敗,錯誤訊息非常不清楚,真的是查了很久才想通問題的主因在哪裡,我覺得值得寫篇文章記錄一下。
... 繼續閱讀 ...
我一年大概都會幫幾家企業導入 Azure DevOps Server 平台,最近幫客戶導入的過程遇到了一個難題。一個方案檔中有 9 個專案,其中有 4 個 .NET Framework 4.7.2 類別庫專案、1 個 .NET Framework 4.7.2 的 ASP.NET Web Forms 專案、2 個 .NET Core 2.1 類別庫專案、1 個 .NET Standard 2.0 專案、2 個 .NET Core 2.1 類別庫專案、1 個 .NET Core 2.1 的 ASP.NET Core 專案。很少看到一個案子用這麼混搭的技術,而這個案子要做 CI/CD 確實也遇到了問題。這篇文章我將說明問題與解決方法!
... 繼續閱讀 ...