我已将客户端库和服务器 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; }
}