Angularjs Breeze一对多导航属性未在不跟踪的情况下完全实现

Angularjs Breeze一对多导航属性未在不跟踪的情况下完全实现,angularjs,breeze,Angularjs,Breeze,我不想阻塞这个问题,我省略了大部分代码,但如果有帮助的话,我可以把它放进去 使用Breeze 1.4.9和Breeze.angular v.0.9.0 我有一个简单的模型:ChartDefinition有一个DataQuery,而DataQuery有一些参数 我有一个问题: var query = breeze.EntityQuery .from("ChartDefinitions") .expand(["DataQuery

我不想阻塞这个问题,我省略了大部分代码,但如果有帮助的话,我可以把它放进去

使用Breeze 1.4.9和Breeze.angular v.0.9.0

我有一个简单的模型:
ChartDefinition
有一个
DataQuery
,而
DataQuery
有一些参数

我有一个问题:

    var query = breeze.EntityQuery
                .from("ChartDefinitions")
                .expand(["DataQuery","DataQuery.Parameters"]);
                //.noTracking();
我可以看到服务器的响应(我已将大多数简单属性替换为“…”):

但是,在实体被具体化之后,最后一个
DataQuery
对象($id:7)有一个参数数组,但它只包含最后一个参数($id:9)

breeze.debug
中挖掘,我看到
noTracking
会导致具体化代码走上不同的路径,因此将
noTracking()
选项附加到查询上。这将导致两个参数都出现在材料化的
参数
数组中。(我假设因为breeze可以正确地实现对象图,所以服务器上的代码没有任何问题?所以我没有把它包括在这个问题中…)

我只想保持
noTracking
选项处于启用状态,但是,我正在向breeze注册一个构造函数,如果
noTracking
处于启用状态,则不会调用它

store.registerEntityTypeCtor('ChartDefinition', ChartDefinition);
如果不使用
noTracking
选项,是否还需要执行其他操作来填充参数数组

编辑:
另一个观察结果是:如果没有
noTracking
选项,则带有$id:8的
DataQueryParameter
实际上会在带有$id:5的
DataQuery
的参数数组中结束,这与服务器上的内容有很大关系

我们的nHibernate设置为
DataQuery
类上的
DataQueryId
属性使用了不同的名称(团队中的开发人员告诉我更新实体时出现了一些问题,这样做解决了这个问题):

这似乎是有道理的;breeze如何知道将
DataQueryParameter.DataQueryId
DataQuery.Id
匹配,但是,我不知道为什么breeze可以在打开noTracking的情况下正确地实现对象图

store.registerEntityTypeCtor('ChartDefinition', ChartDefinition);
<class name="DataQuery" table="sys_DataQuery" dynamic-update="true"  >
  <id name="Id" column="DataQueryId" type="int" unsaved-value="0">
    <generator class="identity" />
  </id>

  ...

  <bag name="Parameters" cascade="all-delete-orphan">
    <key column="DataQueryId"/>
    <one-to-many class="DataQueryParameter"/>
  </bag>
</class>



<class name="DataQueryParameter" table="sys_DataQueryParameter" dynamic-update="true"  >
  ...
  <property name="DataQueryId" type="int" not-null="true" insert="true" update="true" />
  ...
</class>
<class name="DataQuery" table="sys_DataQuery" dynamic-update="true"  >
  <id name="DataQueryId" column="DataQueryId" type="int" unsaved-value="0">
    <generator class="identity" />
  </id>
...