using Abp.Domain.Repositories; using Abp.EntityFrameworkCore.Repositories; using Abp.EntityHistory; using Abp.Events.Bus.Entities; using Abp.Json; using Microsoft.EntityFrameworkCore; namespace VberZero.EntityHistory; public class EntitySnapshotManager : EntitySnapshotManagerBase { public EntitySnapshotManager(IRepository entityChangeRepository) : base(entityChangeRepository) { } protected override Task GetEntityById(TPrimaryKey id) { return EntityChangeRepository.GetDbContext() .Set().AsQueryable().FirstOrDefaultAsync(CreateEqualityExpressionForId(id)); } protected override IQueryable GetEntityChanges(TPrimaryKey id, DateTime snapshotTime) { string fullName = typeof(TEntity).FullName; var idJson = id.ToJsonString(); return EntityChangeRepository.GetAll() //select all changes which created after snapshot time .Where(x => x.EntityTypeFullName == fullName && x.EntityId == idJson && x.ChangeTime > snapshotTime && x.ChangeType != EntityChangeType.Created) .OrderByDescending(x => x.ChangeTime); } }