︿
Top

2024年5月19日 星期日

如何利用 Oracle SQL Developer Data Modeler 由資料庫產生 ER 圖

How to generate ER diagram from existing DB by Oracle SQL Developer Data Modeler

前言

最近專案的資料庫為 Oracle, 部份 table 是由客戶自行設計及管理, 並沒有什麼明確的文件可供參考, 不清楚 table 之間的關聯性.

經上網查詢, 發現 Oracle SQL Developer Data Modeler 可由現行資料庫的結構, 反轉為 ER 圖的功能, 可以看出 table 的關聯性, 故演練一下, 並作成筆記.

當然, table 之間必須要建立 Primary Key, Foreign Key 的關聯, 否則轉出的 ER 圖, 其效果不大.

2024年5月5日 星期日

修改 nuget 的 globalPackagesFolder 設定, 以避免佔用系統磁碟 (C:) 的空間

How to change the default nuget packages folder for saving disk space of C:

前言

由於最近 C: 磁碟機的空間所剩不多, 用 Windows 10 內建的磁碟清理, 它指出 %Temp% 資料夾佔了 19.7GB, 但實際清理, 卻永遠都清不掉.

查了一下黑暗執行縮的三篇文章 (連結如參考文件), 有提到一個 WizTree 的工具, 可用以分析一下磁碟的使用狀況.

結果嚇了一跳, 居然是 66.9GB, 遠比磁碟清理呈現的佔用空間值, 足足多了3倍. 實在不清楚原因. 最近沒安裝什麼軟體, 只有作了 Windows Update, 然後有更新失敗的狀況. 但剛剛去查更新記錄, 居然只有留下成功的, 失敗的記錄通通消失了. 真的很怪異.
按理應該要寫一支 C# 程式定期清理 %Temp% 資料夾下 1 個月前的檔案及資料夾, 但還是有點擔心誤刪. 先暫緩.

另外, 發現 %UserProfile%.nuget\packages 佔了 16.4GB, 有找到 How to change default Nuget packages folder on Windows 的文章, 就來實際演練一下吧.

2024年4月20日 星期六

ASP.NET Core 8 Web API 使用 Oracle.EntityFrameworkCore 存取 Oracle, 並使用 Swagger/OpenAPI 工具進行測試

Access Oracle with Oracle.EntityFrameworkCore in ASP.NET Core 8 Web API, and Test by Swagger/OpenAPI Tools

由於工作上會用到 ASP.NET Core 8 Web API 存取 Oracle 資料庫. 目前查到的方式有 2 種:
1.. 利用 Dapper 作為中介, 直接下 SQL 指令.
2.. 利用 Entity Framework Core 作為中介, 由其將 Entity Framework 的物件內容, 轉為 SQL 指令.

筆者已習慣採用 Entity Framework Core + MSSQL, 所以這篇就來試試 Entity Framework Core + Oracle.

撰寫完成的 Web API 總是要測試, 本文採用 Swagger/OpenAPI 的相關套件及工具, 進行測試.

內容大綱如下:

一. 環境
二. 步驟
(一) 安裝 dotnet-ef 命令列工具 至最新版
(二) 建立 Web API 專案
(三) 加入 Microsoft.EntityFrameworkCore.Tools 套件
(四) 加入 Oracle.EntityFrameworkCore 套件
(五) 建立 Oracle 資料庫, 使用者及 Table
(六) 由 Oracle 資料庫產生 DbContext 及 Models
(七) 撰寫 Web API
(八) 將程式進行優化
(九) 利用 Swashbuckle.AspNetCore 套件產生 Web API 的說明頁面
(十) 利用 NSwag.AspNetCore 套件產生 Web API 的說明頁面
(十一) 利用 NSwagStudio 工具產生用戶端的程式碼
附錄一: Oracle.EntityFranewrokCore 安裝後的提示
附錄二: EF Core Power Tools 執行完成的提示

範例由此下載.

2024年4月6日 星期六

如何在使用者登入後, 自動執行含有 ASP.NET Core 8 Web API 的 Windows Form 應用程式 (含TrayIcon)

How to Auto-Execute Windows Form App (TrayIcon) containing ASP.NET Core 8 Web API after User Login

前一篇把背景服務整合至使用者登入後的 TrayIcon 應用程式, 且確認可在使用者登入後執行. 而 ASP.NET Core 8 Web API 其實也類似一個背景服務, 想說看看是否可以作到.

試想一個情境:
想在瀏覽器的 Javascript 存取使用者的本機資源, 例如: 讀卡機, 描描器, 印表機, 本機環境設定... 等, 受限瀏覽器安全性設計, 應該很難作到. 或許可以, 但筆者不是 Javascript 專家, 想說是否有其它的路可以走. 看到 (黑暗執行緒) 使用 .NET 6 開發 Windows Service 有人詢問瀏覽器存取本機資源的問題, 黑大回覆可以參考這篇 (Microsoft) 在 Windows 服務上裝載 ASP.NET Core.

架構設計如下圖, 但不是真的去讀 ICCard, 只是作一個小的 Web API 驗證可行性.
Architecture for ICCard

筆者的狀況是不一定要裝載在 Windows Service, 只要是登入後執行的 Windows Form App, 且自動縮小到系統匣(System Tray) 即可.

一. 建立 ASP.NET Core 8 Web API 應用程式
(一) 建立 ASP.NET Core 8 Web API 專案
(二) 加入範例 Web API
(三) 採用 Serilog 輸出至 Console 及 File
二. 發佈前述 ASP.NET Core 8 Web API 至單一執行檔
(一) 以 VS2022 進行發佈
(二) 以 Postman 測試發佈後的執行檔
三. 加入 TrayIcon 的功能
(一) 加入 icon 圖檔
(二) 建立一個 Windows Form App 作為修訂 Web API 專案的參考
(三) 修改 .csproj
(四) 修訂其它程式
四. 實際測試
(一) TrayIcon 模式
(二) Console 模式
五. 安全性議題
(一) AllowHosts 設置
(二) CORS 設置
(三) 調整後的 Program.cs
六. 注意事項

範例由此下載.

2024年3月29日 星期五

如何在 .NET 8 建立基於 BackgroundService 的 Windows Service 應用程式 (2)

How to create Windows Service Application in .NET 8 by BackgroundService (2)

接續前一篇 "如何在 .NET 8 建立基於 BackgroundService 的 Windows Service 應用程式 (1)" 的內容.
思考以下情境, 如果該程式是在使用者登入時, 以 Console 模式執行, 那麼在 Windows 10 的工作列上, 是否就很容易被使用者看到, 而去把它關掉. 過程可參考 [附錄一].

因此, 筆者想到以前在 Windows Form 有一個叫作 TrayIcon 或 NotifyIcon 元件或類別, 可以將應用程式以圖示的方式, 存放在工作列(Task Bar) 的通知區(Notification Area) 或系統匣(System Tray).

本文將以前述程式碼為基礎, 添加 NotifyIcon 的功能, 以使整個程式, 得以同時支援 TrayIcon / Console / Windows Service 的使用方式.

一. 開發過程
二. 發行為單一執行檔
三. 以 TrayIcon 模式執行
四. 以 Console 模式執行
五. 以 Windows Service 模式執行
附錄一: 將 JokeWorkerService 放在登入時執行

範例由此下載.

如何在 .NET 8 建立基於 BackgroundService 的 Windows Service 應用程式 (1)

How to create Windows Service Application in .NET 8 by BackgroundService (1)

這是一個參考 (Microsoft)(中文版) 使用 BackgroundService 建立 Windows 服務 所作的演練.

如同 (黑暗執行緒) 使用 .NET 6 開發 Windows Service 所提到的, 可以同時支援 Console 及 Service 這 2 種執行模式真的很不錯. 不然以往都要切 3 個 C# 專案: 核心 Library, Console, Windows Service.

  • Library: 程式邏輯核心.
  • Console: 是為了偵錯用.
  • Windows Service: 是為了部署上線用.

以下為章節列表.

一. 開發過程
二. 採用 Serilog 輸出至 Console 及 File
三. 以 Console 模式執行
四. 以 Windows Service 模式執行

範例由此下載.

2024年3月24日 星期日

Oracle 的容器資料庫(CDB) 與 可拔插資料庫(PDB)

The Oracle Container DB (CDB) and Pluggable (PDB)

前言

由於最近工作上會用到 Oracle, 想說以前用過 11g, 應該很容易入門才對; 但發現在第一關的建立使用者就踼到鐵板, 如下面指令及輸出結果.

CREATE USER JASPER IDENTIFIED BY Test1234;

-- 執行結果:
-- ORA-65096: common user or role name must start with prefix C##

查了一下, 才發現自 Oracle 12c 起導入了所謂的 Multitenant Environment 多租用戶環境觀念, 允許一個 Container Database (CDB) 承載多個 Pluggable Database (PDB).

章節如下:

一. 建立一個 Oracle 23c Free 的 Docker Container
二. 以 11g 的方式, 建立使用者失敗
三. 連入 CDB, 建立 Common User Account
四. 連入 PDB, 建立屬於該 PDB 的 Local User Account
五. 以前述建立的 Local User Account, 建立 Table