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

时间:2017-04-20 21:08:01

标签: breeze

在官方documentation中,它提到DTO可以用作微风实体:

  

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

在Ward Bell的comment中,他建议采用以下策略将DTO与EF实体一起保存:

  
      
  1. 从EntityInfos中删除DTO
  2.   
  3. 从Db中检索相应的业务模型实体(如果这是插入,则创建此类实体)
  4.   
  5. 从DTO更新此副本
  6.   
  7. 将此实体添加到EntityInfos(不要忘记更新的OriginalValues属性)
  8.   
  9. 冲洗并重复所有此类DTO
  10.   
  11. 放手吧...... EF会保存它
  12.   
  13. 拦截"保存后#34;并将更新/插入的业务实体重新映射到SaveResult中的DTO表单,以便您发送DTO,而不是"真实的"实体,回到客户端。
  14.   

此建议的问题在于步骤4. EntityInfo.Entity属性定义为/*jshint esversion: 6 */ var basePage = require('./basePage.js'); var homePage = require('./homePage.js'); var CheckoutPage = function() { this.getRuntValue = element(by.css('.mb10')); this.compareValues = function() { expect(this.getRuntValue.getText()).toContain(this.pessengersRuntValue); }; }; CheckoutPage.prototype = basePage; // extend basePage... module.exports = new CheckoutPage(); 。如何使用正确的EF实体创建EntityInfo?

此建议的一个替代方法是覆盖SaveChangeCore方法并在该方法中处理DTO到EF实体的映射。这样做的缺点是EFContextProvider.SaveChangesCore有很多代码,我宁愿不重复这些努力。

1 个答案:

答案 0 :(得分:0)

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