如何使用 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)
    ];