2020/12/4

錯誤 2010: 指定為此 MSL 之一部分的 Column 'xxxxx' 不在 MetadataWorkspace 中

 最近的專案遇到一個惱人的問題,

某個資料庫上的預存程序(資料表函數)加到EF內,後來更新後,資料庫就一直有問題。

當初沒有找出問題,但後來只要更新EF就心驚膽跳,很怕跑出以下訊息:

本來應該是在模型瀏覽器內把該物件刪除,再重新加入就可以,

偏偏重新編譯後發生錯誤,

錯誤 2010: 指定為此 MSL 之一部分的 Column 'xxx' 不在 MetadataWorkspace 中

一開始以為是SQL端函數定義的參數少了這個欄位'xxx',但不對啊,同事並沒有寫錯。 


吃盡苦頭後發現,這隻函數的回傳欄位數有變化,新版的函數回傳欄位是沒有這個'xxx' 的
所以要展開模型瀏覽器的函式匯入,從這裡去做調整




我的狀況是從資料庫端新增物件成功,但在函式匯入內看到的預存程序/函式名稱變成空的,"傳回下列項目的集合"也沒有顯示。
另外,暴力法砍掉物件重抓,系統照理說會抓取函式物件回傳資料的結構,在這裡叫做"複雜類型"(Complex Type)。但很奇怪,Visual Studio一直會保留舊版的內容。這就是bug的來源。

處理方式:
(1)自己重新選擇資料庫端的預存程序/函式名稱
(2)要自己重新選擇。然後"傳回下列項目的集合",如果一直連到舊的複雜類型,
這時候要點選"取得資料行資訊",確認讀到的欄位與DB端的Schema相同,這時再"建立新的複雜類型"。