breeze:尽管定义了invForeignKeyNames,但复合外键的单向一对多导航仍然没有填充

时间:2015-06-24 18:23:58

标签: breeze

我目前正在使用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中概述的情况不同。在没有深入研究微风源代码的情况下,我想知道我的示例中的复合键是否是问题的一部分?

1 个答案:

答案 0 :(得分:0)

很抱歉,但是breeze不支持使用复合外键进行导航。

主键可以是复合键。导航属性可以链接到该组合键的某个属性。但是FK本身只能是一个属性。

显然,我们通过将foreignKeysinvForeignKeys属性定义为数组来考虑这种可能性。但是,在我们看到大量需求之前,我们推迟了实施(增加了很多复杂性)在追踪这种可能性的14年中,你可能是第一个遇到这种可能性的人(至少在少数人中)。

您可以在我们的用户语音上发布此功能的请求。但是你现在需要另一种方法。

你的模型中有很多这类属性吗?它是只读的吗?如果它是相当孤立的,您可以通过在JsonResultsAdapter中使用客户端操作将三部分密钥转换为单个部分密钥来解决它。如果这个想法具有远程吸引力,我们可以在后续工作中一起解决。