2011-04-01 25 views
1

我正在嘗試完成一個項目的設計,並且基本上已經走到了路上。我決定使用EF4作爲我的數據持久層,但是我現有的數據庫正在引起一些痛苦。更改或增加數據庫不是一種選擇。我有一個真正用於多種用途幷包含120個列的單個表(我沒有設計這個表! - 這是在很久以前SQL Server轉換之後的一個DB2遺留問題)。我設計了一個類圖,以不同的聚合級別從該表中創建五個實體。在我研究在這些情況下做什麼的時候,我已經縮小到MSL層中使用「QueryView」或SSDL層中的「DefiningQuery」來創建我需要從這個巨型表中創建的實體。結果數據只需要是隻讀的。我寧願找回適當的實體,但匿名類型或dbdatarecord會沒事。EF4 QueryView或DefiningQuery?

我試圖在我的CSDL中定義的實體在MSL中使用QueryView,但MSL不斷重新生成,我的更改在編譯時丟失。爲什麼?

任何人都可以提供什麼我應該在這裏輸入?在這種情況下最好使用DefiningQuery或QueryView嗎?任何有關在從數據庫更新我的模型或編譯後保留這些更改的輸入也將非常感激。

回答

2

QueryView不應該重新生成。我不確定QueryView從數據庫更新時的行爲。我確信DefiningQuery在執行從數據庫更新時將被刪除,因爲DefiningQuery在SSDL中定義,它在數據庫更新期間完全刪除。我通過使用兩個不同的EDMXs爲自定義DefiningQueries提供了一些解決方法 - 一個用於查詢,另一個用於從數據庫更新的實體。一般概念是described here

QueryViewDefiningQuery之間的區別是包含這些構造的級別。 QueryView是構建爲定製ESQL查詢的MSL元素,位於現有實體之上,因此您的120列實體必須存在於EDMX中。原因不明QueryViewno support for aggregationsDefiningQuery是將SSDL元素構建爲自定義SQL查詢。它在默認情況下用於數據庫視圖(順便說一句,可能是你最好的選擇)。