矛魚盾

使用 TVP (Table Value Parameters) 實作快速大量更新

使用 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 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

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

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方法

幾種使用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-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.