Angularjs Breeze一对多导航属性未在不跟踪的情况下完全实现
我不想阻塞这个问题,我省略了大部分代码,但如果有帮助的话,我可以把它放进去 使用Breeze 1.4.9和Breeze.angular v.0.9.0 我有一个简单的模型: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
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>
...