專案改寫成 Entity Framework 4 (POCO) 的實作心得

專案改寫成 Entity Framework 4 (POCO) 的實作心得

歷經連續 6 小時、50 個以上的 Class 改寫 和 30組以上的「單元測試」,並經過 400 多個 Compiler Error 。

總算把 原本 Entity Framework 1 的所有的程式碼,統統都改寫成 POCO 的形式。

除了將 DTO 物件移出 DAL 外,同時也實作了 Context 物件的撰寫  ( 這個部分是從 即有的來改 )

經過多次的除錯後總算可以看到 一半以上的單元測試有通過了!

自已修改的步驟 整理如下 ( 僅供參考,實際還是依自已的專案為主  )

  1. 當然請先用 TFS 做好版本管控,並把目前的版本 貼上 「標籤」
  2. 專案請先升級到 Framework 4 ( 沒有的話下面的就不用做了 )
  3. 先將 EDMX 裡的 CS 檔案中 有繼承 ObjectContext 的 Class 整個 copy 出來放到新建立的 cs 出來  ( 其他的可以不用  copy 因為無法直接用了! ) 
    若是要自已寫也 OK !只是個人覺得裡面附的已經可用了!
  4. 然後將 base.CreateObjectSet<自已的 DTO >( “自已的 DTO”  );   請把引號整個刪除!  ( 因為也不會用到它 ,不然介時會無法執行 )
  5. 然後該 Class 中的建構式有用到 Partial Method ,這些都可以直接刪除! ( 若自已有設計考量的話可以留下來 )
  6. 點選 EDMX  檔 –> 屬性 中 將 Custom Tool 「清空」  ( 這時 EDMX 所附屬的 cs 就會不見 )
  7. 接下來就是一邊開啟 EDMX 一邊把 Model  進行 Class 化! 
    名稱一定要一模一樣!大小寫也是!
    當然,關聯的部分也不可以少!若是關聯一個以上請用 List <>
    image (參考) ( 可以用.NET Fx 2.0 的版本 沒問題 )
  8. 之前所有客製化的 Partial DTO 也請一併進來,  但 Model  中依然不可以加入。
  9. 加入 DTO 層的相關引用
  10. 重新編譯 ( 要改到一個都沒有錯誤 )
  11. 執行單元程式
  12. 確定有 綠色小勾勾後 完成 ( 沒有的話請回 10 )

心得

  1. 若是即有系統在沒有「單元測試」的情況下,請勿做大型的改版。 ( 不然除錯會除到死吧! ( 遠目 ) )
  2. 請先自行試作後再改寫,不然根本不知道錯誤發生了要怎麼改! (上一篇 POCO 試作心得)
  3. 若是要改 Model 中的名稱的話!請先把 DTO 物件先取原本的名稱,再用 VS 內建的 Refactoring 來調整!不然會像我一樣改到吐血
  4. 若是發生了「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 裡的不一樣!
  5. 「 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 移出來

image  

有圖有真相