假设我在服务器上有以下类:
类 A ,其属性 a
类 B 源自 A 并添加属性 b
我有另一个班级, C ,其 c 属性 A 。
我通过创建3个复杂对象(有一个实体 E ,具有 CType 类型的属性)在我的客户端提供元信息,每个类一个键入( AType , BType , CType ),如下所示(抱歉这是TypeScript):
export class EType {
public static registerType(metadataHelper: breeze.config.MetadataHelper, store: breeze.MetadataStore): void {
metadataHelper.addTypeToStore(store, {
shortName: "E",
namespace: "ns",
defaultResourceName: "Es",
autoGeneratedKeyType: breeze.AutoGeneratedKeyType.None,
dataProperties: {
itemId: { dataType: breeze.DataType.String, isPartOfKey: true },
e: { complexTypeName: "C" }
}
});
}
}
export class AType {
public static registerType(metadataHelper: breeze.config.MetadataHelper, store: breeze.MetadataStore): void {
metadataHelper.addTypeToStore(store, {
isComplexType: true,
shortName: "A",
namespace: "ns",
dataProperties: {
a: { dataType: breeze.DataType.String }
}
});
}
}
export class BType {
public static registerType(metadataHelper: breeze.config.MetadataHelper, store: breeze.MetadataStore): void {
metadataHelper.addTypeToStore(store, {
isComplexType: true,
shortName: "B",
namespace: "ns",
dataProperties: {
a: { dataType: breeze.DataType.String },
b: { dataType: breeze.DataType.String }
}
});
}
}
export class CType {
public static registerType(metadataHelper: breeze.config.MetadataHelper, store: breeze.MetadataStore): void {
metadataHelper.addTypeToStore(store, {
isComplexType: true,
shortName: "C",
namespace: "ns",
dataProperties: {
c: { complexTypeName: "A" }
}
});
}
}
使用metadataHelper将所有类型注册到商店后,我会执行以下操作:
var bObject = (<breeze.ComplexType>metadataStore.getEntityType("B")).createInstance({ a: "aValue", b: "bValue" });
var cObject = (<breeze.ComplexType>metadataStore.getEntityType("C")).createInstance({ c: b });
var eObject = (<breeze.EntityType>metadataStore.getEntityType("E")).createEntity({ itemId: "001", e: c });
当我在调试器(在_backingStore中)查看对象 cObject 的属性 c 时,它向我显示它是 AType >的对象(我希望得到 BType )。并且该对象的 b 属性不再存在(因为 AType 没有 b 属性)。
现在我明白这是正确的,但我希望 c 能够保存 AType 类型的对象和任何子类型。但是 BType 并不知道它是 AType 的子类型......
问题“breezejs createEntity is undefined”的一个答案似乎暗示这是不受支持的。
此类元数据的最佳做法是什么?我是否需要指定包含 AType 和 BType 的类型,并使 CType 的 c 引用而是复杂的类型?或者有更好的方法来处理元数据中的这种继承吗?
谢谢!
答案 0 :(得分:0)
Breeze目前支持EntityType继承但不支持ComplexType继承。