サーバーからエンティティとメタデータを取得するとき、カスタム初期化関数は期待どおりにナビゲーション プロパティにアクセスできます。メタデータとエンティティを localstorage にエクスポートして再インポートする場合、ナビゲーション プロパティは使用できません。メソッドが呼び出されるときにインポートする前に、ctor と初期化子がメタデータストアに登録されていることを確認しました。私はそよ風のソースを見てみましたが、項目が完全に設定されてアタッチされる前に、初期化関数が呼び出されているようです。
targetEntity = entityType._createEntityCore();
updateTargetFromRaw(targetEntity, rawEntity, dataProps, true);
if (newTempKeyValue !== undefined) {
// fixup pk
targetEntity.setProperty(entityType.keyProperties[0].name, newTempKeyValue);
// fixup foreign keys
if (newAspect.tempNavPropNames) {
newAspect.tempNavPropNames.forEach(function (npName) {
var np = entityType.getNavigationProperty(npName);
var fkPropName = np.relatedDataProperties[0].name;
var oldFkValue = targetEntity.getProperty(fkPropName);
var fk = new EntityKey(np.entityType, [oldFkValue]);
var newFkValue = tempKeyMap[fk.toString()];
targetEntity.setProperty(fkPropName, newFkValue);
});
}
}
*targetEntity.entityAspect._postInitialize();*
targetEntity = entityGroup.attachEntity(targetEntity, entityState);
if (entityChanged) {
entityChanged.publish({ entityAction: EntityAction.AttachOnImport, entity: targetEntity });
if (!entityState.isUnchanged()) {
entityGroup.entityManager._notifyStateChange(targetEntity, true);
}
}
}
if (targetEntity) {
targetEntity.entityAspect.entityState = entityState;
if (entityState.isModified()) {
targetEntity.entityAspect.originalValuesMap = newAspect.originalValues;
}
entityGroup.entityManager._linkRelatedEntities( targetEntity);
}
post initialize 呼び出しを ._linkRelatedEntities 呼び出しの下に移動すると、クエリの実体化とまったく同じように機能するように見えます
if (targetEntity) {
targetEntity.entityAspect.entityState = entityState;
if (entityState.isModified()) {
targetEntity.entityAspect.originalValuesMap = newAspect.originalValues;
}
entityGroup.entityManager._linkRelatedEntities( targetEntity);
*targetEntity.entityAspect._postInitialize();*
}
ここで何か不足していますか?これは設計された機能ですか?EntityManager を渡し、entityAspect マネージャーを設定し、loadNavigationProperties を呼び出すことで回避策を見つけましたが、これは冗長に思えます。ブリーズの人々からの洞察は大歓迎です。
ありがとう、ブラッド