使用自定义元数据加载带有导航属性的实体时出错

时间:2014-08-11 19:09:06

标签: breeze

我使用带有breeze.metadata-helper 1.0.7和BreezeJS 1.4.16的样板来实现自定义元数据方案的以下实现:

    function addFoo() {
        addType({
            shortName: 'Foo',
            dataProperties: {
                Id: { type: ID },
                BarId: { type: ID }
            },
            navigationProperties: {
                Bar: {
                    entityTypeName: 'Bar',
                    associationName: 'Foo_Bar',
                    foreignKeyNames: ['BarId']
                }
            }
        });
    }

    function addBar() {
        addType({
            shortName: 'Bar',
            dataProperties: {
                Id: { type: ID },
            }
        });
    }

完成查询(在下面提供)执行后,我收到以下错误: TypeError:newValue.getProperty不是函数

    var query = breeze.EntityQuery.from('Foos').expand('Bar');
    manager.execute(query).catch(function(error) { });

HTTP响应包含以下JSON:

    [{"Id":1,"BarId":2,"Bar":{"Id":2}}]

虽然如果我用 invForeignKeyNames替换 foreignKeyNames:[&#39; BarId&#39;] ,此查询可以正常工作:[&#39; Id&#39;] 。而且,在后一种情况下, foo 实体的导航属性 Bar()不是实体类型 Bar ,而是一个简单的javascript对象。< / p>

问题是:

1)为什么 foreignKeyNames 的查询失败

2)为什么foo.Bar()不是Bar

类型的实体

感谢。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您如何序列化查询结果。查看JsonResultsAdapter文档,其中讨论了如何处理json有效内容中的引用。您可能需要一个自定义的JsonResultsAdapter(一旦理解了这个想法就很容易编写)。