breezejs v1.3.6打破了我的申请

时间:2013-07-15 15:36:36

标签: javascript breeze

我已将我的客户端库和服务器web api dll更新为最新版本。

现在每当我对查询进行扩展时,我都会遇到这种错误:

unable to locate property: Mandate on type: MandateHistory:#Dom.DirectDebit

查询为:

  var query = breeze.EntityQuery.from("MandatesHistory")
        .where("Mandate.Id", "==", mandatId).expand("Mandate"); 

    return manager.executeQuery(query.using(service));

如果我降级到1.3.3(仅限客户端库),一切正常。

我想尝试1.3.4或1.3.5但我在网站上找不到它们。

1.3.3和1.3.6之间有什么变化可能会破坏我的申请?

修改

这是导致问题的代码:

在1.3.6中,在函数parseCsdNavProperty中,添加了以下代码:

 var constraint = association.referentialConstraint;
    if (!constraint) {
        // TODO: Revisit this later - right now we just ignore many-many and assocs with missing constraints.
        return;
        // Think about adding this back later.
        //if (association.end[0].multiplicity == "*" && association.end[1].multiplicity == "*") {
        //    // many to many relation
        //    ???
        //} else {
        //    throw new Error("Foreign Key Associations must be turned on for this model");
        //}
    }

基本上,对于导航属性MandateHistory.Mandate,没有找到约束,所以代码只返回。这是我的问题的原因。

在版本1.3.3中,没有检查约束,因为首先有以下检查在我的情况下返回false(isScalar为false):

 if (toEnd && isScalar) {
        var constraint = association.referentialConstraint;
        if (constraint) {
            var principal = constraint.principal;
            var dependent = constraint.dependent;
            var propRefs;
            if (csdlProperty.fromRole === principal.role) {
                propRefs = toArray(principal.propertyRef);
            } else {
                propRefs = toArray(dependent.propertyRef);
            }
            // will be used later by np._update
            fkNamesOnServer = propRefs.map(__pluck("name"));
        }
    }

微风团队可以调查这个吗?

根据Jay的建议,必须更改.net模型才能显式设置MandateHistory和Mandate之间的外键关联:

 public class MandateHistory
 {
    [ForeignKey("Mandate")]
    public int Mandate_Id { get; set; }

    public virtual Mandate Mandate { get; set; }
 }

1 个答案:

答案 0 :(得分:0)

我的猜测是你在模型中缺少参照约束。即实体框架认为您没有暴露外键。见Foreign keys in the Entity Framework

Breeze需要外键才能执行自动对象链接逻辑。

这里也有描述:Breeze navigation properties