2017-04-20 77 views
1

在官方documentation,它提到的DTO可以作爲微風實體:在Breeze for .NET中,如何將DTO與實體框架實體一起保存?

它不必是一個ORM類。它可能是一個DTO類,您稍後將通過實現BeforeSaveEntities將其映射到您的業務模型中的類。

comment由Ward貝爾,他提出了節能的DTO一起EF實體以下策略:

  1. 從EntityInfos
  2. 得到對應從數據庫業務模型實體刪除DTO(或創建這樣的實體,如果這是一個插入)
  3. 從DTO更新此副本
  4. 將此實體添加到EntityInfos(不要rget的更新的OriginalValues屬性)
  5. 沖洗和重複所有這樣的DTO
  6. 順其自然吧...和EF將其保存
  7. 攔截「後保存」並重新映射更新/插入業務實體成其DTO形式保存在SaveResult中,以便將DTO(而不是「真實」實體)發送回客戶端。

這項建議的問題是與步驟4中EntityInfo.Entity屬性被定義爲internal。你如何用合適的EF實體創建一個EntityInfo?

這個建議的一個替代方法是覆蓋SaveChangeCore方法並處理DTO到EF實體的映射。這個缺點是EFContextProvider.SaveChangesCore有很多代碼,我寧願不重複那些工作。

回答

0

我找到了ContextProvider.CreateEntityInfo()。它有一個接受實體並設置EntityInfo.Entity屬性的重載。