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

Breeze 基类型的复杂对象属性上的微风类型继承,breeze,Breeze,假设服务器上有以下类: 类A具有属性A 类B,它派生自A,并添加属性B 我有另一个类,classC,它有一个C类型a的属性 我通过创建3个复杂对象(有一个实体E,其属性类型为CType),为每个类类型(AType,BType,CType)提供元信息,如下所示(抱歉,这是TypeScript): 导出类EType{ 公共静态注册表类型(metadataHelper:breeze.config.metadataHelper,store:breeze.MetadataStore):void{ me

假设服务器上有以下类:

  • A具有属性A

  • B,它派生自A,并添加属性B

我有另一个类,classC,它有一个C类型a的属性

我通过创建3个复杂对象(有一个实体E,其属性类型为CType),为每个类类型(ATypeBTypeCType)提供元信息,如下所示(抱歉,这是TypeScript):

导出类EType{
公共静态注册表类型(metadataHelper:breeze.config.metadataHelper,store:breeze.MetadataStore):void{
metadataHelper.addTypeToStore(存储{
简称:“E”,
名称空间:“ns”,
defaultResourceName:“Es”,
autoGeneratedKeyType:breeze.autoGeneratedKeyType.None,
数据属性:{
itemId:{dataType:breeze.dataType.String,isPartOfKey:true},
e:{complexTypeName:“C”}
}
});
}
}
导出类类型{
公共静态注册表类型(metadataHelper:breeze.config.metadataHelper,store:breeze.MetadataStore):void{
metadataHelper.addTypeToStore(存储{
isComplexType:true,
简称:“A”,
名称空间:“ns”,
数据属性:{
a:{dataType:breeze.dataType.String}
}
});
}
}
导出类B类型{
公共静态注册表类型(metadataHelper:breeze.config.metadataHelper,store:breeze.MetadataStore):void{
metadataHelper.addTypeToStore(存储{
isComplexType:true,
简称:“B”,
名称空间:“ns”,
数据属性:{
a:{dataType:breeze.dataType.String},
b:{dataType:breeze.dataType.String}
}
});
}
}
导出类CType{
公共静态注册表类型(metadataHelper:breeze.config.metadataHelper,store:breeze.MetadataStore):void{
metadataHelper.addTypeToStore(存储{
isComplexType:true,
简称:“C”,
名称空间:“ns”,
数据属性:{
c:{complexTypeName:“A”}
}
});
}
}
使用metadataHelper将所有类型注册到存储后,我将执行以下操作:

var-bObject=(metadataStore.getEntityType(“B”)).createInstance({a:“aValue”,B:“bValue”});
var cObject=(metadataStore.getEntityType(“C”)).createInstance({C:b});
var eObject=(metadataStore.getEntityType(“E”)).createEntity({itemId:“001”,E:c});
当我在调试器(在backingStore中)中查看对象cObject的属性c时,它显示它是类型为AType的对象(我希望得到一个BType)。并且该对象的b属性不再存在(因为AType没有b属性)

现在我知道这有点正确,但我希望c能够容纳AType类型的对象和任何子类型的对象。但是,b型不知道它是a型的一个亚型

对问题“”的一个回答似乎暗示这是不受支持的

这种元数据的最佳实践是什么?我是否需要指定一个同时包含ATypeBType的类型,并使CTypec引用该复杂类型?或者有没有更好的方法来处理元数据中的这种继承


谢谢

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

为什么要为此使用复杂类型而不是实体类型。ComplexTypes实际上只适用于没有概念上的唯一标识的情况。原因是它在服务器上的建模方式是这样的:我将请求一个给定的实体,该实体将具有一个类型为“C”的属性和一个完整的复杂对象结构)。对这个复杂对象结构的任何属性的更改都意味着实体已被修改,因此需要提供回服务器以进行持久化。然后,我认为您应该能够完全按照它在服务器上的显示对其进行建模。我不确定我是否理解这个问题。能否显示您的客户端元数据定义代码?在上面的例子中,所有的类A、B和C都是复杂类型,或者是一些实体类型。