【发布时间】:2017-04-21 22:29:55
【问题描述】:
在官方documentation中,提到了DTO可以作为微风实体:
它不必是 ORM 类。它可能是一个 DTO 类,您稍后将通过 BeforeSaveEntities 的实现将其映射到业务模型中的一个类。
在 Ward Bell 的 comment 中,他建议采用以下策略将 DTO 与 EF 实体一起保存:
- 从 EntityInfos 中删除 DTO
- 从 Db 中检索相应的业务模型实体(如果这是插入,则创建这样的实体)
- 从 DTO 更新此副本
- 将此实体添加到 EntityInfos(更新时不要忘记 OriginalValues 属性)
- 冲洗并重复所有此类 DTO
- 放手... EF 会保存它
- 拦截“保存后”并将更新/插入的业务实体重新映射到 SaveResult 中的 DTO 表单,以便您将 DTO(而不是“真实”实体)发送回客户端。
此建议的问题在于第 4 步。EntityInfo.Entity 属性定义为internal。如何使用正确的 EF 实体创建 EntityInfo?
此建议的一种替代方法是覆盖 SaveChangeCore 方法并在该方法中处理 DTO 到 EF 实体的映射。这样做的缺点是 EFContextProvider.SaveChangesCore 有很多代码,我不想重复这些工作。
【问题讨论】:
标签: breeze