Entity framework Breeze返回元数据中的导航属性,但不返回实体上的导航属性

Entity framework Breeze返回元数据中的导航属性,但不返回实体上的导航属性,entity-framework,breeze,Entity Framework,Breeze,在进一步调查后,该问题已被完全编辑,以实际概述根本问题。 我在客户端元数据上没有显示导航属性时遇到问题。通过对breeze客户端代码的深入检查,我发现parseCsdlNavProperty(第6181行)中的以下代码导致我的收藏导航属性被忽略: var constraint = association.referentialConstraint; if (!constraint) { // TODO: Revisit this later - right now we just ign

在进一步调查后,该问题已被完全编辑,以实际概述根本问题。

我在客户端元数据上没有显示导航属性时遇到问题。通过对breeze客户端代码的深入检查,我发现
parseCsdlNavProperty
(第6181行)中的以下代码导致我的收藏导航属性被忽略:

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");
    //}
}
属性referentialConstraint未定义,这导致breeze忽略我的相关实体。问题是我不确定a)为什么这是空的,b)这是做什么的,c)为什么breeze似乎讨厌这个,当实体框架似乎映射的东西很好的时候,d)如何修复它

所以我删除了我的整个元数据和模型的示例,因为它包含了太多的信息。如果有需要的信息,请告诉我,我会添加它

希望这能让问题更具体,更容易理解


谢谢。

模型中缺少引用约束的唯一原因是实体框架认为您没有公开外键。看

Breeze需要外键来执行其自动对象链接逻辑


这里也描述了这一点:

我无法从您的帖子中判断您是否在创建实体或查询实体时遇到问题。但是这篇文章有点太大,难以消化。真正有帮助的是对问题的简化版本,以说明问题。Breeze zip包含一个名为Doc code的示例,该示例包含许多针对EF模型的单元测试。如果您能在此框架内重新处理您的问题,我们很可能会提出解决方案。我将快速查看示例,看看是否可以重现此问题。我想这可能是太多的信息了,抱歉。从本质上讲,如果您查看元数据,就会看到描述的各种导航属性,但是当我在客户端查询元数据或尝试创建实体时,这些实体显然没有导航属性。(查看文章底部创建ExternalTransactionDataSet的示例-元数据显示导航属性-实体没有)因此,进行了更多的研究,到目前为止,如果我将反转键作为对象的属性,我只能使导航属性起作用。这看起来好像在某种程度上与。或者,在创建单向映射时,我们是否必须遵守某些要求?您确实需要识别外键,但最新版本的Breeze(v1.3.5)支持单向导航。你能发布你的元数据吗?或者更好地创建一个小模型来显示问题并发布元数据:)问题是如何识别外键?EF允许我在一端有一个简单的ICollection属性,而在另一端没有任何内容,它将建立导航属性(并在模式中包含外键)。但是breeze不会注意到它,除非我实际包含了一个外键属性(不仅仅是map)。ie:我可以使用HasMany(objectx).WithRequired/Optional.map(m=>m.MapKey(..)进行映射,但它不会注意到这一点-但是如果我在objectx上实际包含一个名为parentId的属性(现在我实际上不需要映射它,只需要让EF做它自己的事情)breeze突然开始注意到。是的,我没有在导航属性上看到breeze需要外键进行关联的气泡。我认为在我的例子中,单向关系的含义是脱节的。我不希望孩子身上有任何东西来识别关系的另一端,因为管理该id的完整性成为一个问题。但显然,在该页面上,breeze需要它。我建议使用控制台或其他调试消息来解释为什么会忽略它。