我目前正在使用Breeze 1.5.3。
我已经为我的模型定义了元数据,因此两个实体之间存在单向一对多关系Column
- > ColumnStatistic
。
当我检查我的服务返回的JSON时,我看到每个ColumnStatistics
的{{1}}集合,但是当我检查生成的实体时,这个集合是空的。
我正在使用EF6来提供主要和外键信息。我的OnModelCreating方法中的相关语句如下:
Column
我为此示例创建了plunker。这个例子比它需要的要复杂得多,因为它包含了本书写范围之外的实体的元数据,但我清楚地看到我的元数据中的modelBuilder.Entity<Column>().HasKey(c => new { c.Owner, c.TableName, c.ColumnName});
modelBuilder.Entity<ColumnStatistic>().HasKey(s=> new { s.Owner, s.TableName, s.ColumnName, s.StatisticName });
modelBuilder.Entity<Column>().HasMany(c => c.ColumnStatistics).WithRequired().HasForeignKey(s => new { s.Owner, s.TableName, s.ColumnName });
关系以及相关的外键约束。
Column_ColumnStatistics
所有外键字段都显示在我的服务返回的"association": [{
"name": "Column_ColumnStatistics",
"end": [{
"role": "Column_ColumnStatistics_Source",
"type": "Edm.Self.Column",
"multiplicity": "1",
"onDelete": {"action": "Cascade"}
},
{
"role": "Column_ColumnStatistics_Target",
"type": "Edm.Self.ColumnStatistic",
"multiplicity": "*"
}],
"referentialConstraint": {
"principal": {
"role": "Column_ColumnStatistics_Source",
"propertyRef": [{"name": "Owner"},
{"name": "TableName"},
{"name": "ColumnName"}]
},
"dependent": {
"role": "Column_ColumnStatistics_Target",
"propertyRef": [{"name": "Owner"},
{"name": "TableName"},
{"name": "ColumnName"}]
}
}
}
个实例中。此数据的典型示例如下:
ColumnStatistic
此外,当我检查{
"$id": "1",
"$type": "Archive.DtoModels.OracleMetadata.Column, Archive",
"Owner": "FUSION",
"TableName": "SGP_STUDENT",
"ColumnName": "CONSOLIDATED_SUBGROUP_CURR",
"DataType": "VARCHAR2",
"ColumnStatistics": [{
"$id": "2",
"$type": "Archive.DtoModels.OracleMetadata.ColumnStatistic, Archive",
"Owner": "FUSION",
"TableName": "SGP_STUDENT",
"ColumnName": "CONSOLIDATED_SUBGROUP_CURR",
"StatisticName": "HasNull",
"StatisticValue": 0},...]
}
中ColumnStatistics
实体类型的Column
属性时,我看到metadataStore
被正确定义为我的三个值复合键在元数据中指定。设计invForeignKeyNames
未定义,因为我打算将它作为从一个端到许多端的单向导航属性。
根据我对Breeze发行说明的解读,inverse
的定义应足以保证版本中的1到n导航性能> = 1.3.5。由于我的案例中定义了invForeignKeyNames
,因此情况似乎与我在此网站上发现的最接近我的post中概述的情况不同。在没有深入研究微风源代码的情况下,我想知道我的示例中的复合键是否是问题的一部分?
答案 0 :(得分:0)
很抱歉,但是breeze不支持使用复合外键进行导航。
主键可以是复合键。导航属性可以链接到该组合键的某个属性。但是FK本身只能是一个属性。
显然,我们通过将foreignKeys
和invForeignKeys
属性定义为数组来考虑这种可能性。但是,在我们看到大量需求之前,我们推迟了实施(增加了很多复杂性)在追踪这种可能性的14年中,你可能是第一个遇到这种可能性的人(至少在少数人中)。
您可以在我们的用户语音上发布此功能的请求。但是你现在需要另一种方法。
你的模型中有很多这类属性吗?它是只读的吗?如果它是相当孤立的,您可以通过在JsonResultsAdapter
中使用客户端操作将三部分密钥转换为单个部分密钥来解决它。如果这个想法具有远程吸引力,我们可以在后续工作中一起解决。