【发布时间】:2016-04-15 00:28:15
【问题描述】:
我正在尝试在微风中延迟加载复杂类型,但无法找到实现此目的的方法。
我想使用复杂类型而不是导航方式的原因是我必须使用的服务不像微风那样做 CRUD。我必须将一个对象及其所有子对象(标量和非标量)发送到负责存储数据的单个服务方法(插入/更新/删除)。
我尝试使用导航属性来执行此操作,但这意味着我必须创建一个实体数组以发送到 API 控制器,并在那里重新创建整个对象。这会很困难,但更是如此,因为子对象中没有外键(到目前为止我看到的所有示例都是这种情况),因此再次映射它们很痛苦。
对于复杂类型,我没有这个问题(或者我不知道)。
我必须使用这样的对象结构:
1.Parent:产品(类)
1.1Child:包(数组)
1.2Child:splitLevels(数组)
1.2.1孙:权限(数组)
1.2.1.1孙子:药店(数组)
1.2.2孙:splitLevel(类)
包装与产品一起加载,这很好用。 然而,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);
【问题讨论】:
标签: javascript breeze