在官方documentation中,它提到DTO可以用作微风实体:
它不一定是ORM类。它可能是一个DTO类,您稍后将通过BeforeSaveEntities的实现映射到业务模型中的类。
在Ward Bell的comment中,他建议采用以下策略将DTO与EF实体一起保存:
- 从EntityInfos中删除DTO
- 从Db中检索相应的业务模型实体(如果这是插入,则创建此类实体)
- 从DTO更新此副本
- 将此实体添加到EntityInfos(不要忘记更新的OriginalValues属性)
- 冲洗并重复所有此类DTO
- 放手吧...... EF会保存它
- 拦截"保存后#34;并将更新/插入的业务实体重新映射到SaveResult中的DTO表单,以便您发送DTO,而不是"真实的"实体,回到客户端。
醇>
此建议的问题在于步骤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有很多代码,我宁愿不重复这些努力。
答案 0 :(得分:0)
我找到了ContextProvider.CreateEntityInfo()。它有一个重载,它接受一个实体并设置EntityInfo.Entity属性。