使用 TVP (Table Value Parameters) 實作快速大量更新 雖然早先就聽過 TVP (Table Value Parameters) 但一直沒有機會用到,這次難得遇到需要快速大量更新資料表的情景,就順手紀錄一下。
ORM 使用 Dapper 來做簡易展示,其實 Dapper 有第三方 Library 版本 Dapper.Plus,可以處理大量更新,且程式碼簡潔易懂,不過是需要付費的版本
環境 Dapper LinqPad 6 Northwind 資料庫 SQL Server Management Studio (SSMS) Note
使用 TVP 更新格式需要完全相容,為了簡易示範,已經提前拿掉所有關聯性的 FK 值
建立資料表值參數型別以及預存程序 使用 SSMS 建立資料表值參數型別
建立名為 OrderTableType 的資料表類型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 USE [Northwind] GO CREATE TYPE [dbo].
ASP.NET Core 3.1 使用 Autofac 與註冊其他分層 步入ASP.NET Core 一定會遇到控制反轉(IoC)和相依性注入(DI)議題,ASP.NET Core有預設的DI Container 就是使用AddTransient、AddScoped、AddSingleton,但若覺得內建的太簡易,可選擇第三方DI Container,最知名的選擇應該就是Autofac,這邊簡單介紹一下Autofac基本導入,與幾種註冊其他分層方式
環境 Nuget > Autofac.Extensions.DependencyInjection 架構 ASP.NET Core 3.1 預設 DI 用法 1 2 3 4 5 6 7 8 9 10 11 public void ConfigureServices(IServiceCollection services) { services.AddScoped<IProductRepository, ProductRepository>(); services.AddScoped<IProductService, ProductService>(); services.AddScoped<IOrderRepository, OrderRepository>(); services.AddScoped<IOrderService, OrderService>(); services.AddScoped<IStatistics, Sales>(); services.AddControllersWithViews(); } ASP.NET Core 3.1 導入 Autofac 安裝 Autofac.Extensions.DependencyInjection
在Program.cs 加入服務
1 2 3 4 5 6 7 public static IHostBuilder CreateHostBuilder(string[] args) => Host.
Convert PDF To Image-ImageMagick PDF檔案轉存為圖片,目前Google搜尋上,此功能絕大多數的文章停留在 .NET Framework,經過數天的嘗試,好不容易才找到適用於 .NET Core 的,趁記憶猶新趕快記錄下來。
ImageMagick 是一款開放原始碼的圖片處理套件,透過 Ghostscript ,也可以將 PDF 轉換為圖片,且使用上十分簡單。
環境 電腦需安裝 Ghostscript Nuget > Magick.NET.Core Nuget > Magick.NET-Q16-AnyCPU 實作 安裝 Ghostscript
Magick.NET 轉換 PDF 需要先安裝 Ghostscript
安裝 Magick.NET.Core 及 執行 Magick.NET-Q16-AnyCPU
名稱中 Q8、Q16 代表像素,Q8的版本是為 8bit,而Q16是為16bit。Q16 相當於不損失精度的情況下讀取或寫入16bit圖像,但所需資源是Q8版本的兩倍。另外還有 Q16-HDRI ,當然是越高圖片品質越好,但也越耗效能。
讀取PDF檔並寫入圖片
1 2 3 4 5 6 7 8 9 10 11 12 void Main() { using var images = new MagickImageCollection(@"C:\temp\test.pdf"); // Create new image that appends all the pages horizontally using var horizontal = images.
NET Logger 寫入資料庫 - NLog 系統紀錄使用者操作、錯誤訊息或是活動日誌紀錄是很常見的需求,ASP.NET Core 預設上就使用了Logger Framework,並且透過這個Logger API 可以很輕鬆與第三方套件如 NLog、Log4Net 完美搭配,在紀錄上更方便了,這邊主要記錄幾個用過的套件,第一款是 NLog,NLog 也是我的首選,安裝說明文件相當清楚,基本上根據官方Getting started,一步步設定即可,這次趁著升級,順便把筆記重新翻寫一下。
環境 .NET Core 3.1 Nuget > NLog.Web.AspNetCore Nuget > Microsoft.Data.SqlClient 實作 安裝 NLog.Web.AspNetCore
官方文件有另外安裝 NLog,但我沒有安裝也可以正常執行,如果不是AspNetCore專案,建議還是安裝
安裝 Microsoft.Data.SqlClient( 或 System.Data.SqlClient)
NLog 寫入MSSQL是使用傳統的 ADO.NET 方式,所以要額外安裝 Microsoft.Data.SqlClient
安裝Microsoft.Data.SqlClient後要在nlog.config中的target指定dbProvider,如果是安裝System.Data.SqlClient似乎不指定也可以
新增 nlog.config 檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <?
幾種使用IHttpClientFactory方法 微軟在.NET Framework 4.5的時候推出HttpClient,以取代原本的WebClient,但是卻有一些連線端耗盡及DNS異動問題。所以微軟又推出了HttpClientFactory來改善這些情況。
關於HttpClient效能議題及HttpClinetFactory介紹,網上已有許多說明,這邊就僅純記錄官方HttpClientFactory使用方法,再補充附加參數的方法
環境 .NET Core 3.1 直接使用HttpClientFactory 無論使用何種方式,都必須在Startup.cs中的ConfigureServices方法中註冊HttpClient
1 2 3 4 5 6 public void ConfigureServices(IServiceCollection services) { services.AddHttpClient(); services.AddRazorPages(); } 在要使用的類別上,使用相依性插入 (DI)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class LineService : ILineService { private readonly IHttpClientFactory _httpClientFactory; public LineService(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } public async Task PushMessage() { // 建立 HttpClient 實例 var httpClient = _httpClientFactory.
初探Docker-Visual Studio 承上篇,上篇只是簡單嘗試一下Docker,這篇則是記錄自己開發環境,如何運行Docker
ASP.NET 專案 新增ASP.NET Core專案 我直接取名Docker1
新增Dockerfile和.dockerignore 在方案資料夾中新增Dockerfile和dockerignore,若Dockerfile放在專案資料夾中,請參考補充
Dockerfile內容 Dockerfile內容,以下為微軟範例稍加修改,說明可參考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # https://hub.docker.com/_/microsoft-dotnet-core FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build WORKDIR /source # copy csproj and restore as distinct layers COPY *.sln . COPY Docker1/*.csproj ./Docker1/ RUN dotnet restore # copy everything else and build app COPY Docker1/. ./Docker1/ WORKDIR /source/Docker1 RUN dotnet publish -c release -o /app --no-restore # final stage/image FROM mcr.