EntitySnapshotManager.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Abp.Domain.Repositories;
  2. using Abp.EntityFrameworkCore.Repositories;
  3. using Abp.EntityHistory;
  4. using Abp.Events.Bus.Entities;
  5. using Abp.Json;
  6. using Microsoft.EntityFrameworkCore;
  7. namespace VberZero.EntityHistory;
  8. public class EntitySnapshotManager : EntitySnapshotManagerBase
  9. {
  10. public EntitySnapshotManager(IRepository<EntityChange, long> entityChangeRepository)
  11. : base(entityChangeRepository)
  12. {
  13. }
  14. protected override Task<TEntity> GetEntityById<TEntity, TPrimaryKey>(TPrimaryKey id)
  15. {
  16. return EntityChangeRepository.GetDbContext()
  17. .Set<TEntity>().AsQueryable().FirstOrDefaultAsync(CreateEqualityExpressionForId<TEntity, TPrimaryKey>(id));
  18. }
  19. protected override IQueryable<EntityChange> GetEntityChanges<TEntity, TPrimaryKey>(TPrimaryKey id, DateTime snapshotTime)
  20. {
  21. string fullName = typeof(TEntity).FullName;
  22. var idJson = id.ToJsonString();
  23. return EntityChangeRepository.GetAll() //select all changes which created after snapshot time
  24. .Where(x => x.EntityTypeFullName == fullName && x.EntityId == idJson && x.ChangeTime > snapshotTime &&
  25. x.ChangeType != EntityChangeType.Created)
  26. .OrderByDescending(x => x.ChangeTime);
  27. }
  28. }