Entity Framework 裡的View,顯示結果不正確 (Entity Framework returns incorrect data from SQL Server view)
我們的專案中,針對某些join非常複雜且使用lambda不易除錯的報表,會先在SQL Server上寫成View或預存程序來呼叫。但某隻報表卻出現奇怪的狀況,原來View的資料是對的,在C# Entity FrameWork程式碼內下中斷點,看到程式產生的SQL也是對的,但輸出的結果卻荒腔走板。 View的內容只是幾個Table的組合,沒有特別的地方 select COMPANY_CODE, COMPANY_NAME, GOODS from SELL_RECORD 1,蘋果, IPAD 1,蘋果, IPHONE 2.HTC, HTC ONE 在EF內則變成 2,蘋果, IPAD 2,蘋果, IPHONE 2,HTC, HTC ONE 後來查了文章 [ 出處1 ] [ 出處2 ],問題在於查詢的欄位內有COMPANY_CODE這個欄位是查詢結果相關table的第一個主索引鍵,但並不是 Query 結果的真正索引鍵。而Entity FrameWork在將查詢結果轉為物件的過程中,需要在查詢結果內找到有意義的Key值,任其自行推斷會發生恐怖的不測。 最後我們使用 SQL 2005以後即具備的 ROW_NUMBER 方式幫記錄排序,並產生流水序號CID供EF判斷。也別忘了在EF的模型檢式介面,手動將此欄位設定為主索引鍵並重新建置,才能發揮作用。 ROW_NUMBER () OVER ( ORDER BY SomeValue ) AS CID