使用者定義資料表類型 和 entity mapping


前言

本人某天在工作的時候,想說該改的程式碼都改好了應該可以順利執行吧~興高采烈在postman按下send,visual studio卻回傳下面的錯誤訊息(燈愣!!!

當時直覺就是先去確認我新增的欄位型別有沒有問題,確(摸)認(魚)了一整天還是找不到原因,只好去求助前輩了QQ結果發現是 entity和使用者定義資料表的欄位沒有mapping到

p.s.如果碰到問題卡關太久,真的可以直接去請教前輩。不要像我一樣硬幹還找不出結果。雖然會想自己解決問題,但其實當我們碰到問題的時候,可能都會有預設立場,e.g.像是覺得某個地方一定沒有錯誤、陷入邏輯盲點之類的

過程

和前輩討論覺得可能原因是,在執行store procedure時去呼叫使用者定義資料表。這時候會去比對entity和使用者定義資料表的欄位型別,這裡會推測是比對型別是因為欄位名稱可以隨意取但型別是已經固定的,而且後來我在修改entity的欄位順序時,有地方順序沒改對就出現類似上面錯誤訊息但內容是型別不相符。有可能是使用了SqlDataRecord,詳情可以看下面提供的參考文章第一篇。詳細mapping機制我還是沒有很清楚,如果有人知道歡迎補充~

結論

如果之後看到這個錯誤訊息,可以往幾個方向思考

  1. 使用者定義資料表的欄位型別是否和要呼叫的store procedure都符合
  2. entity和使用者定義資料表的欄位順序是否有完全相同
    工程師就是一直在掉入火坑和爬出火坑中來回xD每次的踩坑都要學起來~

Reference

  1. C# - 呼叫 MSSQL Store Procedure 傳入 UDT 參數 (Table-Valued Parameter)
  2. [SQL] 資料表值參數 (Table Value Parameters)
  3. [C#][ASP.NET] Web API 開發心得 (6) - 輕量級的 ORM 工具 Dapper + Slapper.AutoMapper - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
#dapper #SQL #C#






你可能感興趣的文章

VSCode 終端機無法執行指令碼

VSCode 終端機無法執行指令碼

7. 濾波器設計

7. 濾波器設計

[Day 7] JS in Pipeline (7): CI/CD pipeline (2) (Fin.)

[Day 7] JS in Pipeline (7): CI/CD pipeline (2) (Fin.)






留言討論