为了减少微风元数据的大小,我们计划制作基于实体的元数据。这样每个实体元数据都会按需从服务器下载。
以前,元数据是通过微风(正常行为)下载的,对我们来说效果很好。为了实现元数据的按需加载,我尝试了“importMetadata”功能。但是“entityManager.HasChanges()”总是返回“false”,但是用户输入的数据存在于json实体中。
我使用下面的代码片段来做同样的事情。
constructor(private bwhttp: BWHttp) {
this.em = new EntityManager(this.serviceName);
this.em.dataService.hasServerMetadata = false;
this.em.saveOptions = new SaveOptions({ allowConcurrentSaves: true });
}
public getData(data: string, formType?, args?, system?, taxtype?) {
this.bwhttp.get("http://someserver.cdn.com/metadata/"+formType+".json").subscribe(httpdata => {
var metadata = JSON.stringify(httpdata['_body']);
this.em.metadataStore.importMetadata(metadata, true);
this.getDataInternal(data, formType, args, system, taxtype);
});
}
public saveChanges(propertyName: string) {
this.applyPropertyChanges(propertyName);
if (!this.em.hasChanges()) return;//it always gives false.
this.em
.saveChanges()
.then(result => {
this.status = "Changes Saved."
this.hassaved.next(true);
})
.catch(err => {
this.status = "Error:" + err.toString();
this.em.rejectChanges();
});
}
我错过了什么吗?请帮助我。