将包含ComplexTypes的新EntityTypes添加到Breeze的metadataStore

时间:2013-03-28 14:58:55

标签: breeze

我正在关注Breeze的NoDb sample,以便为Breeze metaDataStore添加自定义类型。我的目标是能够调用我的web api控制器方法,并使该对象的客户端版本完全充实。

我无法检索Employee对象并映射我的Employee属性(FirstName,LastName)以及我所包含的复杂类型。这些复杂类型只是我的Employee对象上的属性,包括服务器端的其他自定义类的集合。

例如,我有一个自定义类型的" CompanyAffiliates"包含CompanyId和Name属性。

我似乎无法让Breeze正确地映射任何内容,而且我没有从错误中获得任何反馈。任何人都可以给我一些建议吗?

以下是一些相关代码:

addEmployeeType = function() {
                var entityType = new _entityType({
                    shortName: "Employee",
                    namespace: "HSSPortal.Business.Models",
                    autoGeneratedKeyType: _autoGeneratedKeyType.Identity
                });
                entityType.addProperty(new _dataProperty({
                    name: "customerId",
                    dataType: _dataType.String,
                    isNullable: false,
                    isPartOfKey: true
                }));
                entityType.addProperty(new _dataProperty({
                    name: "firstName",
                    dataType: _dataType.String,
                    isNullable: false
                }));

                entityType.addProperty(new _dataProperty({
                    name: "lastName",
                    dataType: _dataType.String,
                    isNullable: false
                }));
 _store.addEntityType(entityType);

1 个答案:

答案 0 :(得分:1)

我的猜测是,您在服务器上创建的类型没有与您在客户端上注册的名称相匹配的名称。在这种情况下,您的客户端类型与“HSSPortal.Business.Models”命名空间中名为“Employee”的服务器端类型相匹配。

您可以更改客户端类型注册码或服务器端类型,以使您的类型名称匹配。或者,您可以使用JsonResultsAdapter将服务器中的序列化类型名称解释为客户端上的已注册类型。在您的情况下可能不需要这种方法。

一个小注:在上面的代码中,你实际上并没有在这里注册一个轻微的“ComplexType”。通过AddComplexType方法创建复杂类型,并且不具有键属性或AutoGeneratedKeyType。概念上,“ComplexTypes”表示除了在其父实体的上下文中之外不可查询的属性的集合。

如果您实际上在代码中注册了复杂类型(上面未显示),那么它们将具有类似的命名问题。