2017-04-20 62 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属性的重载。