我试图懒惰加载微风中的复杂类型,但无法找出一种方法来实现这一点。微风 - 延迟加载复杂类型
我想使用复杂类型而不是导航方式的原因是,我必须使用的服务不像微风那样使用CRUD。我必须将所有子对象(包括标量和非标量)的单个对象发送到负责存储数据(插入/更新/删除)的单一服务方法。
我试图做到这一点与导航属性,但这意味着我必须创建一个实体数组发送到一个API控制器,并在那里重新创建整个对象。这很难,但更重要的是,因为子对象中没有外键(这是我迄今看到的所有示例中的情况),因此再次映射它们是一件痛苦的事情。
复杂的类型,我没有这个问题(或不是我所知道的)。
我要消耗的对象结构是这样的:
1.Parent:产物(类)
1.1Child:包(阵列)
1.2Child:splitLevels(数组)
1.2.1Grandchild:权限(阵列)
1.2.1.1Grandgrandchild:药房(数组)
1.2.2Grandchild:splitLevel(class)
软件包与产品一起加载,这工作得很好。 Howevers,splitLevels不包含在这个数据合同中(因为它需要太多的数据,不会经常咨询)。当请求这些数据时,会在产品中添加一个布尔值来表明它们已经被加载,从那时起它也需要将它们发送到服务器。
当装载产品,这将导致一个问题: 对象不支持属性或方法“的getProperty”
这是由_initializeInstance方法在风引起的:
if (initFn) {
if (typeof initFn === "string") {
initFn = instance[initFn];
}
initFn(instance);
}
this.complexProperties && this.complexProperties.forEach(function (cp) {
var ctInstance = instance.getProperty(cp.name);
cp.dataType._initializeInstance(ctInstance);
});
的实例空的,没有属性可以从中获取。
有什么办法可以解决这个问题吗? 有没有办法使用导航属性而不会获取多个实体;这样我就可以送一个对象,而无需使用这样的:
if (product.entityAspect.entityState.isUnchanged()) {
product.entityAspect.setModified();
}
// Packages
var entitiesToSave = product.packages().slice();// copy
// Split Levels
if (product.storeSplitLevels) {
product.splitLevelsLoaded(true);
// TODO: Add split levels to entities to save
}
// Product Details
entitiesToSave.push(product);
对不起这个,我的问题是: 1.是否有可能延迟加载嵌套复杂类型;是包含复杂类型的数组,其中包含其他复杂类型。我无法得到这个工作(cfr从微风的代码块)。 2.如果没有,有没有办法使用导航属性,而没有在同一级别的所有实体,但传入的数据合同定义它们的方式相同。但你真的用你的评论回答了这个问题。 – Reinout