using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace CQRS_Simple.Infrastructure { public class Entity : IEntity { [Key] public virtual TPrimaryKey Id { get; set; } private List _domainEvents; /// /// Domain events occurred. /// protected IReadOnlyCollection DomainEvents => _domainEvents?.AsReadOnly(); /// /// Add domain event. /// /// protected void AddDomainEvent(IDomainEvent domainEvent) { _domainEvents ??= new List(); _domainEvents.Add(domainEvent); } /// /// Clead domain events. /// public void ClearDomainEvents() { _domainEvents?.Clear(); } /// public override int GetHashCode() { return Id == null ? 0 : Id.GetHashCode(); } /// public override string ToString() { return $"[{GetType().Name} {Id}]"; } } public interface IEntity { TPrimaryKey Id { get; set; } void ClearDomainEvents(); } }