簡短的問題是:如何處理EF4中的數據透視表?除了「樞軸客戶端」以外的任何建議都將被認爲是有幫助的。EF4到數據集?和其他數據透視表瘋狂
一個想法是直接查詢數據庫並將結果放入數據集。這不是一個非常紳士的解決方案。我唯一的想法是使用某種反射魔法來動態地爲臨時對象創建屬性。我不知道如何在View中處理這個問題。
這裏的更詳細的解釋和諸如此類的東西:
我的申請件裝備。它允許用戶「聲稱」一件設備,然後爲該設備設置一個狀態。
相關的表結構如下:
EquipmentId, EquipmentName, etc
ClaimId, StatusChangeId, EquipmentId, UserId
StatusChangeId, StatusId, etc
StatusId, StatusName, etc
我的查詢查找所有相關索賠的用戶(不刪除 或存檔或新的,只能用設定的狀態的),獲取最新的狀態對每個人來說,他們都會記起來,然後將他們與他們各自的設備聯繫起來。
這大屁股的動態查詢樞軸轉動數據,以創建像一個結果:
equipment name Total Status1 Status2 Status 3
Computer 4 0 3 1
Monitor 6 1 5 0
問題是...我如何處理,在EF4?很明顯,沒有 清理解決方案,因爲狀態是動態的並且以 列的形式返回。這意味着對象將不得不神奇地創建 屬性。這些狀態在接下來的幾周內不太可能發生變化,所以作爲一個 臨時解決方案,我強制爲它提供了一個對象,其狀態爲 硬編碼。但是這是醜陋的醜陋的,有點擊敗我的動態列,以及整個狀態表的目的。
我唯一的其他的想法是採取和分裂我的漂亮的新查詢 只需不到一秒鐘對1000+記錄碰上一個獲取狀態和計數在單件的 裝備一個微小 一點查詢一段時間,並把它們放在一起代碼。
對於擁有數百種不同類型設備的用戶,這意味着數百次訪問數據庫。我還有另外兩個基於這個問題的查詢,這些查詢會爲與基本用戶關聯的用戶獲取設備信息...因此,如果有一個用戶擁有幾百種類型的設備,並且他與兩個其他用戶每個擁有70種類型的設備,並且他們有用戶關聯......您可以獲取圖片。
編輯
它發生,我認爲這可能通過將列與StatusName一個簡單的對象的列表,並算作一個EquipmentStatus對象的一部分來解決。可悲的是,我仍然不知道如何做映射。 Even though Microsoft acknowledges that handling pivots is an issue, their official word is "we don't know when it'll happen".
EDIT 2
只要我有時間,我將發佈我的最終解決方案。我們本週終於投入生產,所以可能會有幾天。對不起有人來這裏尋找答案。
有兩件事:第一,「查詢使數據像創建一個表一樣」 - 實際上是* resultset *,而不是表;這導致:第二,你是否需要客戶端代碼中的**對象**來保存這個數據透視的結果?通常,如果不是在之前立即進行非常接近的旋轉,則顯示輸出結果;如果你不需要對象,直接進入商店連接並運行你的存檔!我不確定你的意思是通過生成一個「不是非常紳士的解決方案」的數據集 - 你缺少什麼? – AakashM 2012-07-09 08:26:55
修正了術語。而且我不需要「物體」,但我總體上非常憤怒,因爲EF4在處理這樣的事情方面非常糟糕。他們的記錄的列和數據類型對我來說是已知的,所以我應該能夠創建一個嵌套的對象列表來處理列。它開始看起來像數據集是唯一可行的答案。 – Will 2012-07-09 09:24:24