Dot-Net
SQL 伺服器視圖在實體框架中返回不同的結果
我在 SQl 伺服器中有一個 sql 視圖:
SELECT dbo.job.idJob, SUM(dbo.tracking.iQty) AS TotalOrdered, dbo.tracking.idProduct FROM dbo.tracking INNER JOIN dbo.job ON dbo.tracking.idJob = dbo.job.idJob GROUP BY dbo.tracking.idAction, dbo.tracking.idProduct, dbo.job.idJob在 SQL Server 中,它返回:
idJob TotalOrdered idProduct ----------- ------------ ----------- 5000 150 9 5000 75 18 5006 20 3問題:
當我在 WPF 4.5 項目中通過 Entity Framework 6 訪問此視圖時,它返回不同的結果。我將視圖添加到 edmx 文件中,然後按以下方式呼叫視圖:
Public Function GetTracking_Ordered(idJob As Integer) As Collection(Of vw_Tracking_Ordered) Implements ITrackingDataService.GetTracking_Ordered Try Using context = _ModelService.NewContext Dim trackingList = (From recs In context.vw_Tracking_Ordered Where recs.idJob = idJob Select recs).ToList Return New Collection(Of vw_Tracking_Ordered)(trackingList) End Using Catch ex As Exception Return Nothing End Try End Function結果如下:
idJob TotalOrdered idProduct ----------- ------------ ----------- 5000 150 9 5000 75 9 5006 20 3注意 5000 作業的 idProduct 現在都是 9 而不是 9 和 18。
問題:
誰能幫我調試一下為什麼這個結果會從 SQL Server 更改為 Entity Framework?
提前致謝
確保您
View在.edmx文件中分配了**主鍵。**如果沒有,請entity key使用 edmx 設計器自己添加正確的。在這種情況下,您可能希望在實體鍵中包含列idJob和idProduct。另請閱讀此處:http: //msdn.microsoft.com/en-us/library/vstudio/dd163156 (v=vs.100).aspx
我很欣賞@Vland,他的回答有助於理解問題是關於失去的關鍵!所以我從根本上解決了問題!我知道這不是最佳實踐,但這些步驟解決了我的問題!
- 我通過 ROW_NUMBER() 在視圖中添加了一行
選擇 ROW_NUMBER() over(order by FieldA asc) as id, FieldA, FieldB from MyView
你可以把上面的程式碼放在你的視圖中
我有一個 rowNumber 列用於索引視圖行
- 在 Visual Studio 中,我更新了 .edmx 圖中的模型並添加了新視圖
- 檢查 id 列是否未簽名為 Key,右鍵點擊 id 欄位並點擊“Entity Key”,如果它們是鍵符號,請記住取消選中其他列。
- 重建和午餐項目,你可以看到結果是正確的,你可以在 sql server 中看到