breeze:尽管定义了invForeignKeyNames,但复合外键仍无法填充的单向一对多导航
我目前正在使用Breeze 1.5.3 我已经为我的模型定义了元数据,以便在两个实体breeze:尽管定义了invForeignKeyNames,但复合外键仍无法填充的单向一对多导航,breeze,Breeze,我目前正在使用Breeze 1.5.3 我已经为我的模型定义了元数据,以便在两个实体Column->ColumnStatistic之间存在单向一对多关系 当我检查服务返回的JSON时,我看到每个列都有一个ColumnStatistics集合,但是当我检查结果实体时,这个集合是空的 我使用EF6提供主键和外键信息。我的OnModelCreating方法中的相关语句如下 modelBuilder.Entity<Column>().HasKey(c => new { c.Owner,
Column
->ColumnStatistic
之间存在单向一对多关系
当我检查服务返回的JSON时,我看到每个列都有一个ColumnStatistics
集合,但是当我检查结果实体时,这个集合是空的
我使用EF6提供主键和外键信息。我的OnModelCreating方法中的相关语句如下
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 });
所有外键字段都出现在my service返回的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
属性时,我发现invForeignKeyNames
被正确定义为我在元数据中指定的三值复合键。根据设计,inverse
是未定义的,因为我希望这是一个从一侧到多一侧的单向导航属性
根据我对Breeze发行说明的阅读,invForeignKeyNames
的定义应足以保证版本>=1.3.5中的1到n可导航性。由于invForeignKeyNames
是在我的案例中定义的,因此情况似乎与我在本网站上设法发现的最接近我的案例中概述的情况有所不同。在没有深入研究breeze源代码的情况下,我想知道我的示例中的组合键是否是问题的一部分 抱歉,breeze不支持使用复合外键进行导航
主键可以是复合键。导航属性可以链接到该组合键的一个属性。但FK本身只能是一种财产
显然,我们通过将foreignKeys
和invForeignKeys
属性定义为数组来考虑这种可能性。但我们推迟了实施(这增加了很多复杂性),直到我们看到了巨大的需求。在追踪这一可能性的14年中,你可能是第一个(至少是少数人中的一个)遇到它的人
您可以在我们的用户语音上发布此功能的请求。但你现在需要另一种方法
你的模型中有很多这样的属性吗?它是只读的吗?如果它相当孤立,您可以通过在JsonResultsAdapter
中通过客户端操作将三部分键转换为单部分键来解决它。如果这个想法有点吸引力,我们可以在后续工作中一起解决。我的模型非常简单,而且是只读的,我使用的是DTO。因此,当我投影到我的对象并且重新调整元数据以反映新情况时,我可以将三部分键映射到一个键(即,将部分连接到一个字符串中,各个部分之间用:
)分隔)。尽管听起来很诱人,但我认为在这种情况下我可以放弃客户端解决方案。谢谢你的回复。
{
"$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},...]
}