專案改寫成 Entity Framework 4 (POCO) 的實作心得
歷經連續 6 小時、50 個以上的 Class 改寫 和 30組以上的「單元測試」,並經過 400 多個 Compiler Error 。
總算把 原本 Entity Framework 1 的所有的程式碼,統統都改寫成 POCO 的形式。
除了將 DTO 物件移出 DAL 外,同時也實作了 Context 物件的撰寫 ( 這個部分是從 即有的來改 )
經過多次的除錯後總算可以看到 一半以上的單元測試有通過了!
自已修改的步驟 整理如下 ( 僅供參考,實際還是依自已的專案為主 )
- 當然請先用 TFS 做好版本管控,並把目前的版本 貼上 「標籤」
- 專案請先升級到 Framework 4 ( 沒有的話下面的就不用做了 )
- 先將 EDMX 裡的 CS 檔案中 有繼承 ObjectContext 的 Class 整個 copy 出來放到新建立的 cs 出來 ( 其他的可以不用 copy 因為無法直接用了! )
若是要自已寫也 OK !只是個人覺得裡面附的已經可用了! - 然後將 base.CreateObjectSet<自已的 DTO >( “自已的 DTO” ); 請把引號整個刪除! ( 因為也不會用到它 ,不然介時會無法執行 )
- 然後該 Class 中的建構式有用到 Partial Method ,這些都可以直接刪除! ( 若自已有設計考量的話可以留下來 )
- 點選 EDMX 檔 –> 屬性 中 將 Custom Tool 「清空」 ( 這時 EDMX 所附屬的 cs 就會不見 )
- 接下來就是一邊開啟 EDMX 一邊把 Model 進行 Class 化!
名稱一定要一模一樣!大小寫也是!
當然,關聯的部分也不可以少!若是關聯一個以上請用 List <>(參考) ( 可以用.NET Fx 2.0 的版本 沒問題 )
- 之前所有客製化的 Partial DTO 也請一併進來, 但 Model 中依然不可以加入。
- 加入 DTO 層的相關引用
- 重新編譯 ( 要改到一個都沒有錯誤 )
- 執行單元程式
- 確定有 綠色小勾勾後 完成 ( 沒有的話請回 10 )
心得
- 若是即有系統在沒有「單元測試」的情況下,請勿做大型的改版。 ( 不然除錯會除到死吧! ( 遠目 ) )
- 請先自行試作後再改寫,不然根本不知道錯誤發生了要怎麼改! (上一篇 POCO 試作心得)
- 若是要改 Model 中的名稱的話!請先把 DTO 物件先取原本的名稱,再用 VS 內建的 Refactoring 來調整!不然會像我一樣改到吐血
- 若是發生了「The relationship 'PrintStoreDBModel.WorkDetailBook_FK_PriceCustomID' was not loaded because the type PrintStoreDBModel.PriceCustom' is not available. The following information may be useful in resolving the previous error: The required property 'WorkDetails' does not exist on the type 'DTO.PriceCustom'.」 的話!
就是代表 DTO 的 屬性 和 EDMX 裡的不一樣! - 「 The type 'Edm.String' of the member 'Birthday' in the conceptual side type
'PrintStoreDBModel.Customer' does not match with the type 'System.DateTime'
of the member 'Birthday' on the object side type 'DTO.Customer'. 」 這也一樣!只是 型別不對!
看看最後跑出來的畫面吧! 真的把 DTO 移出來
有圖有真相