我已将我的客户端库和服务器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; }
}
答案 0 :(得分:0)
我的猜测是你在模型中缺少参照约束。即实体框架认为您没有暴露外键。见Foreign keys in the Entity Framework。
Breeze需要外键才能执行自动对象链接逻辑。
这里也有描述:Breeze navigation properties