using IRaCIS.Core.Domain.BaseModel; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Security.Cryptography; namespace IRaCIS.Core.Domain.Models { public interface IAggregateRoot; public interface IEntity { abstract TKey Id { get; set; } } public abstract class Entity : IEntity { [Key] [Required] [DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } #region 领域事件 仅仅允许通过提供的方法进行操作 //[NotMapped] //private readonly List _domainEvents = []; //[NotMapped] //public IReadOnlyCollection DomainEvents => _domainEvents.AsReadOnly(); //public void AddDomainEvent(DomainEvent domainEvent) //{ // _domainEvents.Add(domainEvent); //} //public void RemoveDomainEvent(DomainEvent domainEvent) //{ // _domainEvents.Remove(domainEvent); //} //public void ClearDomainEvents() //{ // _domainEvents.Clear(); //} #endregion } #region 减少实体属性,增加基类 public abstract class BaseAuditAddEntity : Entity, IAuditAdd { public Guid CreateUserId { get; set; } public DateTime CreateTime { get; set; } } public abstract class BaseFullAuditEntity : Entity, IAuditUpdate, IAuditAdd { public Guid CreateUserId { get; set; } public DateTime CreateTime { get; set; } public Guid UpdateUserId { get; set; } public DateTime UpdateTime { get; set; } } public abstract class BaseFullAuditDeleteEntity : Entity, IAuditUpdate, IAuditAdd, ISoftDelete { public Guid? DeleteUserId { get; set; } public bool IsDeleted { get; set; } public DateTime? DeletedTime { get; set; } public Guid CreateUserId { get; set; } public DateTime CreateTime { get; set; } public Guid UpdateUserId { get; set; } public DateTime UpdateTime { get; set; } } public abstract class BaseAuditAddEntityWithUserName : Entity, IAuditAddWithUserName { public string CreateUser { get; set; } public Guid CreateUserId { get; set; } public DateTime CreateTime { get; set; } } public abstract class BaseAuditUpdateEntity : Entity, IAuditUpdate { public Guid UpdateUserId { get; set; } public DateTime UpdateTime { get; set; } } #endregion }