【问题标题】:breeze: related entity load error微风:相关实体加载错误
【发布时间】:2014-04-21 18:27:19
【问题描述】:

下一个查询失败并出现错误“对象不支持方法'getProperty'”:

breeze.EntityQuery
   .from("Accounts")
   .expand('settlementOrganization,managementCompany')
   .using(manager).execute()

breeze为账号设置相关实体​​管理公司时出现错误:

来自 Chrome 的异常信息:

TypeError: undefined is not a function
    at defaultPropertyInterceptor [as _$interceptor] (breeze.debug.js:5083:49)
    at ko.computed.write (breeze.debug.js:15978:34)
    at dependentObservable [as managementCompany] (knockout-3.0.0.js:1496:31)
    at proto.setProperty (breeze.debug.js:16017:31)
    at updateRelatedEntity (breeze.debug.js:14456:26)
    at mergeRelatedEntity (breeze.debug.js:14393:13)
    at breeze.debug.js:14376:17
    at Array.forEach (native)
    at updateEntity (breeze.debug.js:14374:41)
    at mergeEntity (breeze.debug.js:14345:13)

defaultPropertyInterceptor 中的代码需要实体并尝试使用它的方法 getProperty,但我们有原始实体数据 (breeze.debug.js:4961),而不是实体。

帐户和公司类型的元数据正常。我可以单独加载公司,它们将被和平地设置为现有帐户。但是使用扩展加载帐户会引发错误。

是bug吗?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    我找到了问题的根源。

    我正在使用带有 web api 和 EFContextProvider 的微风。出于安全考虑,我在方法上方添加了属性 Queryable:

    [HttpGet]
    [Queryable(MaxExpansionDepth = 3)]
    public IQueryable<Account> Accounts()
    {
       return _contextProvider.Context.Accounts;
    }
    

    我以为微风不会和这个属性冲突,但是当我删除属性时,一切都开始正常了。同样的属性也破坏了其他 IQueriable 源的 inlineCount。

    【讨论】:

    • 这是一个 [BreezeQueryable] 属性,您可以使用它来代替 [Queryable] 来实现此目的。 [BreezeQueryable] 的原因是 .NET [Queryable] 属性指定了破坏 Breeze 的 WebApi 序列化和格式。
    • 谢谢!那么我将使用 [BreezeQueryable]。
    • @JayTraband 为什么 [BreezeQueryable(MaxExpansionDepth = 1)] 允许使用扩展查询?我使用扩展和选择进行查询,即使属性应该允许它也成功扩展了引用属性。
    • 不确定我是否理解您的问题?
    • 看来,我不能通过将 BreezeQueryableAttribute.MaxExpansionDepth 设置为 0 或 1 来允许查询扩展。问题是关于这个的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多