0

我正在关注 Breeze 的NoDb 示例,以便将自定义类型添加到 Breeze 元数据存储中。我的目标是能够调用我的 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);
4

1 回答 1

1

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

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

一个小提示:在上面的代码中,您实际上并没有在这里注册一个轻而易举的“ComplexType”。复杂类型是通过 AddComplexType 方法创建的,它既没有键属性也没有 AutoGeneratedKeyType。从概念上讲,“ComplexTypes”表示除了在其父实体的上下文中不可查询的属性的集合。

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

于 2013-03-28T16:48:31.360 回答