DbEntityEntryExtensions.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Data.Entity;
  3. using System.Data.Entity.Core.Objects;
  4. using System.Data.Entity.Infrastructure;
  5. using System.Linq;
  6. using System.Reflection;
  7. using Abp.Auditing;
  8. using Abp.Domain.Entities;
  9. using Abp.Extensions;
  10. namespace IwbZero.EntityHistory.Extensions
  11. {
  12. internal static class DbEntityEntryExtensions
  13. {
  14. internal static Type GetEntityBaseType(this DbEntityEntry entityEntry)
  15. {
  16. return ObjectContext.GetObjectType(entityEntry.Entity.GetType());
  17. }
  18. internal static PropertyInfo GetPropertyInfo(this DbEntityEntry entityEntry, string propertyName)
  19. {
  20. return entityEntry.GetEntityBaseType().GetProperty(propertyName);
  21. }
  22. internal static DbPropertyValues GetPropertyValues(this DbEntityEntry entityEntry)
  23. {
  24. if (entityEntry.State == EntityState.Deleted)
  25. {
  26. return entityEntry.OriginalValues;
  27. }
  28. return entityEntry.CurrentValues;
  29. }
  30. internal static bool HasAuditedProperties(this DbEntityEntry entityEntry)
  31. {
  32. var propertyNames = entityEntry.GetPropertyValues().PropertyNames;
  33. var entityType = entityEntry.GetEntityBaseType();
  34. return propertyNames.Any(p => entityType.GetProperty(p)?.IsDefined(typeof(AuditedAttribute)) ?? false);
  35. }
  36. internal static bool IsCreated(this DbEntityEntry entityEntry)
  37. {
  38. return entityEntry.State == EntityState.Added;
  39. }
  40. internal static bool IsDeleted(this DbEntityEntry entityEntry)
  41. {
  42. if (entityEntry.State == EntityState.Deleted)
  43. {
  44. return true;
  45. }
  46. var entity = entityEntry.Entity;
  47. return entity is ISoftDelete && entity.As<ISoftDelete>().IsDeleted;
  48. }
  49. }
  50. }