2013-09-27 133 views
6

我有一個N層應用程序,其中POCO由服務器端的實體框架填充並傳輸到我的客戶端應用程序。客戶端對POCO進行更改或添加新的POCO,然後將它們發送回服務器以存儲在數據庫中。實體框架POCO更改跟蹤策略

如果我使用的是純粹的POCO,即沒有代理,不是自我跟蹤的實體,那麼人們正在採取哪些常見方法來解決變更跟蹤問題?如果您的服務收到POCO的集合,它如何知道使用實體框架進行添加,更新或刪除?

回答

6

實體框架對這種斷開連接的情況沒有很好的內置支持。我知道的三個基本選擇:

  • 使用GraphDiff,一個開源插件庫

    優勢

    • 沒有必要寫在客戶端更改跟蹤代碼
    • 更新數據庫中斷開的對象圖的常見模式
    • Not co德寫在服務器端


    缺點

    • 必須將數據庫查詢和實體都被加載到檢測對象是否要添加,更新或刪除
    • 依賴在第三方文庫中除了EF核心文庫外


  • 更新對象圖上的服務器側手動(Example

    優點

    • 無需編寫變化跟蹤代碼在客戶端
    • 沒有依賴於一個第三方庫除了EF核心庫


    缺點

    • 數據庫必須查詢和實體必須裝載到檢測對象是否要添加,更新或刪除
    • 沒有共同的模式,即大多數的更新方案需要單獨的代碼
    • 很多代碼在服務器端寫


  • 添加實體狀態屬性的對象,並跟蹤對客戶端更改通過設置國家相應(我沒有這種方法的例子;我相信,朱莉勒曼使用和推薦它)

    優勢

    • 數據庫不必進行查詢,以檢測對象是否要添加,更新或除了EF核心庫中刪除的第三方庫
    • 沒有任何依賴
    • (可能?)共同在服務器端模式被跟蹤狀態轉化爲實體狀態連接實體


    Disadvan的每日新聞

    • 變化跟蹤代碼來寫在客戶端
    • 在客戶端沒有共同的模式,即,最變化跟蹤方案(和客戶端類型/ UI技術)需​​要的個體代碼