@@ -599,7 +599,9 @@ internal ValueTask RegisterTypeIdsAsync<T>(IEnumerable<T> values, CancellationTo
599599 }
600600 }
601601
602- internal async ValueTask RemoveTypeIdsAsync < T > ( T [ ] values , CancellationToken token )
602+ internal ValueTask RemoveTypeIdsByValueAsync < T > ( T value , CancellationToken token ) =>
603+ RemoveTypeIdsByIdAsync < T > ( value . GetId ( ) . ToString ( ) , token ) ;
604+ internal async ValueTask RemoveTypeIdsByValuesAsync < T > ( T [ ] values , CancellationToken token )
603605 {
604606 var typeIdsSetKey = GetTypeIdsSetKey < T > ( ) ;
605607 if ( this . Pipeline != null )
@@ -616,7 +618,18 @@ internal async ValueTask RemoveTypeIdsAsync<T>(T[] values, CancellationToken tok
616618 }
617619 }
618620
619- internal async ValueTask RemoveTypeIdsAsync < T > ( string [ ] ids , CancellationToken token )
621+ internal async ValueTask RemoveTypeIdsByIdAsync < T > ( string id , CancellationToken token )
622+ {
623+ var typeIdsSetKey = GetTypeIdsSetKey < T > ( ) ;
624+ if ( this . Pipeline != null )
625+ GetRegisteredTypeIdsWithinPipeline ( typeIdsSetKey ) . Remove ( id ) ;
626+ else
627+ {
628+ await AsAsync ( ) . RemoveItemFromSetAsync ( typeIdsSetKey , id , token ) . ConfigureAwait ( false ) ;
629+ }
630+ }
631+
632+ internal async ValueTask RemoveTypeIdsByIdsAsync < T > ( string [ ] ids , CancellationToken token )
620633 {
621634 var typeIdsSetKey = GetTypeIdsSetKey < T > ( ) ;
622635 if ( this . Pipeline != null )
@@ -637,48 +650,46 @@ async Task IEntityStoreAsync.DeleteAsync<T>(T entity, CancellationToken token)
637650 {
638651 var urnKey = UrnKey ( entity ) ;
639652 await AsAsync ( ) . RemoveAsync ( urnKey , token ) . ConfigureAwait ( false ) ;
640- await this . RemoveTypeIdsAsync ( new [ ] { entity } , token ) . ConfigureAwait ( false ) ;
653+ await this . RemoveTypeIdsByValueAsync ( entity , token ) . ConfigureAwait ( false ) ;
641654 }
642655
643656 async Task IEntityStoreAsync . DeleteByIdAsync < T > ( object id , CancellationToken token )
644657 {
645658 var urnKey = UrnKey < T > ( id ) ;
646659 await AsAsync ( ) . RemoveAsync ( urnKey , token ) . ConfigureAwait ( false ) ;
647- await this . RemoveTypeIdsAsync < T > ( new [ ] { id . ToString ( ) } , token ) . ConfigureAwait ( false ) ;
660+ await this . RemoveTypeIdsByIdAsync < T > ( id . ToString ( ) , token ) . ConfigureAwait ( false ) ;
648661 }
649662
650663 async Task IEntityStoreAsync . DeleteByIdsAsync < T > ( ICollection ids , CancellationToken token )
651664 {
652665 if ( ids == null || ids . Count == 0 ) return ;
653666
654- var idsList = ids . Cast < object > ( ) . ToList ( ) ;
655- var urnKeys = idsList . Map ( UrnKey < T > ) ;
656- await AsAsync ( ) . RemoveEntryAsync ( urnKeys . ToArray ( ) , token ) . ConfigureAwait ( false ) ;
657- await this . RemoveTypeIdsAsync < T > ( idsList . Map ( x => x . ToString ( ) ) . ToArray ( ) , token ) . ConfigureAwait ( false ) ;
667+ var idStrings = ids . Cast < object > ( ) . Select ( x => x . ToString ( ) ) . ToArray ( ) ;
668+ var urnKeys = idStrings . Select ( UrnKey < T > ) . ToArray ( ) ;
669+ await AsAsync ( ) . RemoveEntryAsync ( urnKeys , token ) . ConfigureAwait ( false ) ;
670+ await this . RemoveTypeIdsByIdsAsync < T > ( idStrings , token ) . ConfigureAwait ( false ) ;
658671 }
659672
660673 async Task IEntityStoreAsync . DeleteAllAsync < T > ( CancellationToken token )
661674 {
662- await DeleteAllAsync < T > ( 0 , RedisConfig . DeleteAllBatchSize , token ) . ConfigureAwait ( false ) ;
675+ await DeleteAllAsync < T > ( 0 , RedisConfig . CommandKeysBatchSize , token ) . ConfigureAwait ( false ) ;
663676 }
664677
665- private async Task DeleteAllAsync < T > ( ulong cursor , int pageSize , CancellationToken token )
678+ private async Task DeleteAllAsync < T > ( ulong cursor , int batchSize , CancellationToken token )
666679 {
667680 var typeIdsSetKey = this . GetTypeIdsSetKey < T > ( ) ;
668- var callCount = 0 ;
669- while ( cursor != 0 || callCount == 0 )
681+ var asyncClient = AsAsync ( ) ;
682+ do
670683 {
671- var scanResult = await NativeAsync . SScanAsync ( typeIdsSetKey , cursor , pageSize , token : token ) . ConfigureAwait ( false ) ;
672- callCount ++ ;
684+ var scanResult = await NativeAsync . SScanAsync ( typeIdsSetKey , cursor , batchSize , token : token ) . ConfigureAwait ( false ) ;
673685 cursor = scanResult . Cursor ;
674- var ids = scanResult . Results . Select ( x => x . FromUtf8Bytes ( ) ) ;
675- var urnKeys = ids . Map ( t => AsAsync ( ) . UrnKey < T > ( t ) ) ;
676- if ( urnKeys . Count > 0 )
686+ var urnKeys = scanResult . Results . Select ( id => UrnKey < T > ( id . FromUtf8Bytes ( ) ) ) . ToArray ( ) ;
687+ if ( urnKeys . Length > 0 )
677688 {
678- await AsAsync ( ) . RemoveEntryAsync ( urnKeys . ToArray ( ) , token ) . ConfigureAwait ( false ) ;
689+ await asyncClient . RemoveEntryAsync ( urnKeys , token ) . ConfigureAwait ( false ) ;
679690 }
680- }
681- await AsAsync ( ) . RemoveEntryAsync ( new [ ] { typeIdsSetKey } , token ) . ConfigureAwait ( false ) ;
691+ } while ( cursor != 0 ) ;
692+ await asyncClient . RemoveEntryAsync ( new [ ] { typeIdsSetKey } , token ) . ConfigureAwait ( false ) ;
682693 }
683694
684695 ValueTask < List < string > > IRedisClientAsync . SearchSortedSetAsync ( string setId , string start , string end , int ? skip , int ? take , CancellationToken token )
0 commit comments