{"record":{"id":"0b94646f84753c05","repo":"aspnetboilerplate/aspnetboilerplate","slug":"unknown-entitychangetype","errorCode":null,"errorMessage":"Unknown EntityChangeType: ","messagePattern":"Unknown EntityChangeType: ","errorType":"exception","errorClass":"AbpException","httpStatus":null,"severity":"error","filePath":"src/Abp/Events/Bus/Entities/EntityChangeEventHelper.cs","lineNumber":104,"sourceCode":"        {\n            foreach (var changedEntity in changedEntities)\n            {\n                switch (changedEntity.ChangeType)\n                {\n                    case EntityChangeType.Created:\n                        TriggerEntityCreatingEvent(changedEntity.Entity);\n                        TriggerEntityCreatedEventOnUowCompleted(changedEntity.Entity);\n                        break;\n                    case EntityChangeType.Updated:\n                        TriggerEntityUpdatingEvent(changedEntity.Entity);\n                        TriggerEntityUpdatedEventOnUowCompleted(changedEntity.Entity);\n                        break;\n                    case EntityChangeType.Deleted:\n                        TriggerEntityDeletingEvent(changedEntity.Entity);\n                        TriggerEntityDeletedEventOnUowCompleted(changedEntity.Entity);\n                        break;\n                    default:\n                        throw new AbpException(\"Unknown EntityChangeType: \" + changedEntity.ChangeType);\n                }\n            }\n        }\n\n        protected virtual void TriggerDomainEvents(List<DomainEventEntry> domainEvents)\n        {\n            foreach (var domainEvent in domainEvents)\n            {\n                EventBus.Trigger(domainEvent.EventData.GetType(), domainEvent.SourceEntity, domainEvent.EventData);\n            }\n        }\n\n        protected virtual void TriggerEventWithEntity(Type genericEventType, object entity, bool triggerInCurrentUnitOfWork)\n        {\n            var entityType = entity.GetType();\n            var eventType = genericEventType.MakeGenericType(entityType);\n\n            if (triggerInCurrentUnitOfWork ||","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/aspnetboilerplate/aspnetboilerplate/blob/2323c13a152aa0ebfb37af3830f687d7f5b53795/src/Abp/Events/Bus/Entities/EntityChangeEventHelper.cs#L86-L122","documentation":"EntityChangeEventHelper.TriggerEntityChangeEvents iterates EntityChangeType values (Created/Updated/Deleted) collected by the unit of work and throws AbpException when the ChangeType is none of these. Since EntityChangeType normally only holds those three values, hitting the default branch signals an internal invariant violation — usually a custom or extended EntityChangeType enum value that the event helper does not handle, or corrupted change-tracking state.","triggerScenarios":"A unit-of-work entity change snapshot carries an EntityChangeType value outside Created/Updated/Deleted (custom enum extension, memory corruption, or a custom IEntityChangeSet source), then TriggerEntityChangeEvents runs at UoW completion via TriggerEventsInternal.","commonSituations":"Upgrading ABP while a custom enum value was added; third-party code casting an int into EntityChangeType; bespoke change-tracking integrations; binary serialization of old enum values.","solutions":["Find the code assigning the unexpected EntityChangeType value and restrict it to Created/Updated/Deleted.","If you extended EntityChangeType, override EntityChangeEventHelper and handle the new value in your own helper.","Cast validation: never (EntityChangeType)rawInt without checking Enum.IsDefined.","Log changedEntity.ChangeType at the throw point to identify which value leaked in."],"exampleFix":"// before\nvar changeType = (EntityChangeType)rawValue; // may be undefined\n// after\nif (!Enum.IsDefined(typeof(EntityChangeType), rawValue))\n    throw new ArgumentException($\"Invalid EntityChangeType value: {rawValue}\");\nvar changeType = (EntityChangeType)rawValue;","handlingStrategy":"type-guard","validationCode":"if (!Enum.IsDefined(typeof(EntityChangeType), changeEntity.ChangeType))\n    throw new InvalidOperationException($\"ChangeType {changeEntity.ChangeType} is not a known EntityChangeType\");","typeGuard":"bool IsKnownEntityChangeType(EntityChangeType t) =>\n    t == EntityChangeType.Created || t == EntityChangeType.Updated || t == EntityChangeType.Deleted;","tryCatchPattern":"try\n{\n    await _unitOfWork.CompleteAsync(); // triggers entity change events\n}\ncatch (AbpException ex) when (ex.Message.StartsWith(\"Unknown EntityChangeType\"))\n{\n    Logger.Error(ex.Message);\n    throw; // invariant violation — should not be swallowed\n}","preventionTips":["Never cast raw ints to EntityChangeType without Enum.IsDefined","Do not extend EntityChangeType with custom values ABP doesn't handle","Keep ABP framework and custom change-tracking code versions aligned","Log ChangeType values when debugging UoW event dispatch"],"tags":["abp","unit-of-work","enum","internal"],"backgroundTag":"invalid-enum-value","analyzedSha":"2323c13a152aa0ebfb37af3830f687d7f5b53795","analyzedAt":"2026-09-08T08:00:50.638Z","contentChangedAt":"2026-09-08T08:00:50.638Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}