Breeze类型继承基类型的复杂对象属性

时间:2014-06-11 16:07:21

标签: breeze

假设我在服务器上有以下类:

  • 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 引用而是复杂的类型?或者有更好的方法来处理元数据中的这种继承吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

Breeze目前支持EntityType继承但不支持ComplexType继承。