@@ -21,12 +21,12 @@ namespace VirtoCommerce.Platform.Data.GenericCrud
21
21
/// </summary>
22
22
/// <typeparam name="TModel">The type of service layer model</typeparam>
23
23
/// <typeparam name="TEntity">The type of data access layer entity (EF) </typeparam>
24
- /// <typeparam name="TChangeEvent ">The type of *change event</typeparam>
24
+ /// <typeparam name="TChangingEvent ">The type of *changing event</typeparam>
25
25
/// <typeparam name="TChangedEvent">The type of *changed event</typeparam>
26
- public abstract class CrudService < TModel , TEntity , TChangeEvent , TChangedEvent > : ICrudService < TModel >
26
+ public abstract class CrudService < TModel , TEntity , TChangingEvent , TChangedEvent > : ICrudService < TModel >
27
27
where TModel : Entity , ICloneable
28
28
where TEntity : Entity , IDataEntity < TEntity , TModel >
29
- where TChangeEvent : GenericChangedEntryEvent < TModel >
29
+ where TChangingEvent : GenericChangedEntryEvent < TModel >
30
30
where TChangedEvent : GenericChangedEntryEvent < TModel >
31
31
{
32
32
private readonly IEventPublisher _eventPublisher ;
@@ -38,7 +38,7 @@ public abstract class CrudService<TModel, TEntity, TChangeEvent, TChangedEvent>
38
38
/// </summary>
39
39
/// <param name="repositoryFactory">Repository factory to get access to the data source</param>
40
40
/// <param name="platformMemoryCache">The cache used to temporary store returned values</param>
41
- /// <param name="eventPublisher">The publisher to propagate platform-wide events (TChangeEvent , TChangedEvent)</param>
41
+ /// <param name="eventPublisher">The publisher to propagate platform-wide events (TChangingEvent , TChangedEvent)</param>
42
42
protected CrudService ( Func < IRepository > repositoryFactory , IPlatformMemoryCache platformMemoryCache , IEventPublisher eventPublisher )
43
43
{
44
44
_repositoryFactory = repositoryFactory ;
@@ -215,7 +215,7 @@ public virtual async Task SaveChangesAsync(IList<TModel> models)
215
215
}
216
216
217
217
// Raise domain events
218
- await _eventPublisher . Publish ( EventFactory < TChangeEvent > ( changedEntries ) ) ;
218
+ await _eventPublisher . Publish ( EventFactory < TChangingEvent > ( changedEntries ) ) ;
219
219
await CommitAsync ( repository ) ;
220
220
}
221
221
@@ -238,7 +238,7 @@ protected virtual Task<IList<TEntity>> LoadExistingEntities(IRepository reposito
238
238
{
239
239
var ids = models . Where ( x => ! x . IsTransient ( ) ) . Select ( x => x . Id ) . ToList ( ) ;
240
240
241
- return ids . Any ( )
241
+ return ids . Count > 0
242
242
? LoadEntities ( repository , ids )
243
243
: Task . FromResult < IList < TEntity > > ( Array . Empty < TEntity > ( ) ) ;
244
244
}
@@ -263,33 +263,33 @@ public virtual async Task DeleteAsync(IList<string> ids, bool softDelete = false
263
263
{
264
264
var models = await GetAsync ( ids ) ;
265
265
266
- using ( var repository = _repositoryFactory ( ) )
267
- {
268
- // Raise domain events before deletion
269
- var changedEntries = models . Select ( x => new GenericChangedEntry < TModel > ( x , EntryState . Deleted ) ) . ToList ( ) ;
270
- await _eventPublisher . Publish ( EventFactory < TChangeEvent > ( changedEntries ) ) ;
266
+ using var repository = _repositoryFactory ( ) ;
271
267
272
- if ( softDelete )
273
- {
274
- await SoftDelete ( repository , ids ) ;
275
- await repository . UnitOfWork . CommitAsync ( ) ;
276
- }
277
- else
268
+ // Raise domain events before deletion
269
+ var changedEntries = models . Select ( x => new GenericChangedEntry < TModel > ( x , EntryState . Deleted ) ) . ToList ( ) ;
270
+ await _eventPublisher . Publish ( EventFactory < TChangingEvent > ( changedEntries ) ) ;
271
+
272
+ if ( softDelete )
273
+ {
274
+ await SoftDelete ( repository , ids ) ;
275
+ await repository . UnitOfWork . CommitAsync ( ) ;
276
+ }
277
+ else
278
+ {
279
+ var keyMap = new PrimaryKeyResolvingMap ( ) ;
280
+ foreach ( var model in models )
278
281
{
279
- var keyMap = new PrimaryKeyResolvingMap ( ) ;
280
- foreach ( var model in models )
281
- {
282
- var entity = FromModel ( model , keyMap ) ;
283
- repository . Remove ( entity ) ;
284
- }
285
- await repository . UnitOfWork . CommitAsync ( ) ;
286
- await AfterDeleteAsync ( models , changedEntries ) ;
282
+ var entity = FromModel ( model , keyMap ) ;
283
+ repository . Remove ( entity ) ;
287
284
}
288
- ClearCache ( models ) ;
289
-
290
- // Raise domain events after deletion
291
- await _eventPublisher . Publish ( EventFactory < TChangedEvent > ( changedEntries ) ) ;
285
+ await repository . UnitOfWork . CommitAsync ( ) ;
286
+ await AfterDeleteAsync ( models , changedEntries ) ;
292
287
}
288
+
289
+ ClearCache ( models ) ;
290
+
291
+ // Raise domain events after deletion
292
+ await _eventPublisher . Publish ( EventFactory < TChangedEvent > ( changedEntries ) ) ;
293
293
}
294
294
295
295
/// <summary>
@@ -342,7 +342,7 @@ protected virtual TEntity FromModel(TModel model, PrimaryKeyResolvingMap keyMap)
342
342
343
343
protected virtual GenericChangedEntryEvent < TModel > EventFactory < TEvent > ( IList < GenericChangedEntry < TModel > > changedEntries )
344
344
{
345
- return ( GenericChangedEntryEvent < TModel > ) typeof ( TEvent ) . GetConstructor ( new [ ] { typeof ( IEnumerable < GenericChangedEntry < TModel > > ) } ) . Invoke ( new object [ ] { changedEntries } ) ;
345
+ return ( GenericChangedEntryEvent < TModel > ) typeof ( TEvent ) . GetConstructor ( [ typeof ( IEnumerable < GenericChangedEntry < TModel > > ) ] ) . Invoke ( [ changedEntries ] ) ;
346
346
}
347
347
}
348
348
}
0 commit comments