如何使用ngrx/data-saveEntities添加多个实体进行存储



我正在尝试使用ngrx/data向存储添加多个实体->saveEntities。到目前为止,我得到了这个:

@Injectable()
export class MaintenanceEntityService extends EntityCollectionServiceBase<Maintenance> {
constructor(
private serviceElementsFactory: EntityCollectionServiceElementsFactory,
private entityCacheDispatcher: EntityCacheDispatcher) {
super('Maintenance', serviceElementsFactory);
}
addBatch(maintenances: Maintenance[]) {
const changes: ChangeSetItem[] = [
cif.add('Maintenance', maintenances)
];
const changeSet: ChangeSet = { changes, tag: 'Creating alert batch'};
return this.entityCacheDispatcher.saveEntities(changeSet, `${environment.API}maintenances`).pipe(
map(response => response)
);
}
}

我的端点接收并返回如下对象:

interface ChangeSet<T = any> {
changes: ChangeSetItem[]
extras?: T
tag?: string
}

在后端,我将所有实体插入数据库,然后在返回相同的对象之前,我更新ID,但在Angular应用程序中,存储没有得到更新。我是不是错过了什么?

https://ngrx.io/api/data/EntityCacheDispatcher#saveentities

好的,ChangeSet对象有一个名为ChangeSetItem的属性,具有下一个结构:

type ChangeSetItem = ChangeSetAdd | ChangeSetDelete | ChangeSetUpdate | ChangeSetUpsert;
interface ChangeSetAdd<T = any> {
op: ChangeSetOperation.Add
entityName: string
entities: T[]
}

因此,我需要从后端返回相应的entityName,以便将其添加到存储中:在我的情况下:维护

不确定为什么没有在此行中设置属性:

const changes: ChangeSetItem[] = [
cif.add('Maintenance', maintenances)
];

创建ChangeSet时在其上设置entityName

const changeSet: ChangeSet = { 
entityName: 'Maintenance',
changes, 
tag: 'Creating alert batch'
};

这应该可以确保它在那里进行完整的往返旅行。从您的示例中还不清楚cif是什么,但它似乎只适用于ChangeSetItem,而不适用于ChangeSet

其次,尽管这可能与您无关,但如果您的服务器正在为您保存的实体分配id,则需要启用悲观保存-这可以在各种扩展点完成。如果启用了乐观保存,我认为ngrx在成功时不会对您的变更集做任何事情——例如,新的id不会分配给新的实体。

最新更新