在Breeze for.NET中,如何将DTO与实体框架实体一起保存?

在Breeze for.NET中,如何将DTO与实体框架实体一起保存?,breeze,Breeze,在官方文件中,提到DTO可以用作breeze实体: 它不必是ORM类。它可能是一个DTO类,您稍后将通过BeforeSaveEntities的实现将其映射到业务模型中的一个类中 在Ward Bell的一份报告中,他提出了以下与EF实体一起保存DTO的策略: 从EntityInfos中删除DTO 从Db中检索相应的业务模型实体(如果这是插入,则创建这样的实体) 从DTO更新此副本 将此实体添加到EntityInfos(不要忘记更新的OriginalValues属性) 冲洗并重复所有此类DTO 让它

在官方文件中,提到DTO可以用作breeze实体:

它不必是ORM类。它可能是一个DTO类,您稍后将通过BeforeSaveEntities的实现将其映射到业务模型中的一个类中

在Ward Bell的一份报告中,他提出了以下与EF实体一起保存DTO的策略:

  • 从EntityInfos中删除DTO
  • 从Db中检索相应的业务模型实体(如果这是插入,则创建这样的实体)
  • 从DTO更新此副本
  • 将此实体添加到EntityInfos(不要忘记更新的OriginalValues属性)
  • 冲洗并重复所有此类DTO
  • 让它去吧。。。EF会保存它
  • 截取“保存后”并在SaveResult中将更新/插入的业务实体重新映射到其DTO表单中,以便将DTO而不是“真实”实体发送回客户端
  • 此建议的问题在于步骤4。EntityInfo.Entity属性定义为
    internal
    。如何使用适当的EF实体创建EntityInfo


    此建议的一种替代方法是重写SaveChangeCore方法,并在该方法中处理DTO到EF实体的映射。这样做的缺点是EFContextProvider.SaveChangesCore有很多代码,我不想重复这些工作。

    我找到了ContextProvider.CreateEntityInfo()。它有一个重载,用于接受实体并设置EntityInfo.entity属性。

    我找到了ContextProvider.CreateEntityInfo()。它具有接受实体并设置EntityInfo.entity属性的重载