我有三个实体:地区,网站和还款(实际上有大约十几个,但这些是重要的实体)。相关代码是:
public class Site
{
[Key, Column(Order = 0)]
public int DistrictId { get; set; }
[Key, Column(Order = 1)]
public int SiteId { get; set; }
public string Name { get; set; }
public virtual District District { get; set; }
}
public class District
{
public int DistrictId { get; set; }
public string Name { get; set; }
public virtual ICollection<Repayment> Repayments { get; set; }
}
public class Repayment
{
[Key, Column(Order = 0)]
public int DistrictId { get; set; }
[Key, Column(Order = 1)]
public int RepaymentId { get; set; }
public string Name { get; set; }
[InverseProperty("Repayments")]
[ForeignKey("DistrictId")]
public virtual District District { get; set; }
}
然后,在FluentAPI中我有:
modelBuilder.Entity<Repayment>().HasRequired(r => r.District)
.WithMany(d => d.Repayments)
.HasForeignKey(r => new { r.DistrictId});
模型在C#端正确执行,当我使用适当的Include子句时,在区中将还款作为集合。然而,Breeze无法找到该区域下的还款集合(还款在其他几个实体的缓存中)。我已经尝试了Fluent API和Data Annotation的所有组合(仅使用数据注释,使用带有和不带流畅api的部分数据注释等),并且没有区别。
有趣的是,当我针对1.5.1版本的Context Provider和2.1.5.1版本的BreezeWebApi运行它时,客户端代码完美地工作(并填充区域下的还款)(不工作的版本是1.5 .2和2.1.5.2)。但是,我从一个不太复杂的模型移植到一个更复杂的模型,所以后端不完全相同(这些类的字节是字节相同)。
我很感激任何想法。
编辑: 我刚刚在工作现场安装了更新的版本(2.1.5.2和1.5.2),它没有引起任何问题。所以版本变化似乎不是罪魁祸首。还有其他我应该检查的事情吗?
TIA
编辑:更多信息 在一个区内,共有10个一对多导航属性,其中还款只有一个。其中8个正确填充(并以完全相同的方式定义),而其中两个(包括Repayments属性)则没有。在服务器端,所有10个属性都被识别并填充,而在客户端,Breeze仅将8个属性“连接”到区域(所有相关实体都在缓存中并连接到至少一个其他实体,只是没有区实体)。很奇怪。帮助
编辑:Curiouser和curiouser: 微风元数据似乎具有适当的导航属性定义。以下是地区实体中的还款(不工作)和季节性客户(工作)的NavProp定义:
{
"name": "Repayments",
"relationship": "Self.Repayment_District",
"fromRole": "Repayment_District_Target",
"toRole": "Repayment_District_Source"
},
{
"name": "SeasonClients",
"relationship": "Self.SeasonClient_District",
"fromRole": "SeasonClient_District_Target",
"toRole": "SeasonClient_District_Source"
},
以下是两个实体中如何定义区域的导航属性:
REPAYMENT导航属性:
{
"name": "District",
"relationship": "Self.Repayment_District",
"fromRole": "Repayment_District_Source",
"toRole": "Repayment_District_Target"
},
SEASON CLIENT导航属性:
{
"name": "District",
"relationship": "Self.SeasonClient_District",
"fromRole": "SeasonClient_District_Source",
"toRole": "SeasonClient_District_Target"
},
这是SeasonClient_District关系定义:
{
"name": "SeasonClient_District",
"end": [{
"role": "SeasonClient_District_Source",
"type": "Edm.Self.SeasonClient",
"multiplicity": "*"
},
{
"role": "SeasonClient_District_Target",
"type": "Edm.Self.District",
"multiplicity": "1",
"onDelete": {
"action": "Cascade"
}
}],
"referentialConstraint": {
"principal": {
"role": "SeasonClient_District_Target",
"propertyRef": {
"name": "DistrictId"
}
},
"dependent": {
"role": "SeasonClient_District_Source",
"propertyRef": {
"name": "DistrictId"
}
}
}
},
这与byte-for-byte相同(如果将'SeasonClient'替换为'Repayment')作为Repayment_District关系定义。
有什么想法吗?
答案 0 :(得分:1)
return EntityQuery.from('FlowCharts')
.withParameters({ flowChartId: 1 })
.expand('Nodes.NodeFunction.NodeFunctionParameters, Connections')
.using(manager).execute()
.then(querySucceeded)
.catch(_queryFailed);
但不是现在(2015年2月 - 更新到最新的libs之后)。将相关实体名称改为小写有帮助(请阅读@Ward调试技巧):
return EntityQuery.from('flowCharts')
.withParameters({ flowChartId: 1 })
.expand('nodes.nodeFunction.nodeFunctionParameters, connections')
.using(manager).execute()
.then(querySucceeded)
.catch(_queryFailed);
希望它有所帮助。 Grzech