134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Core.Domain.BaseModel;
 | 
						|
 | 
						|
namespace IRaCIS.Core.Domain.Models;
 | 
						|
public interface IAggregateRoot;
 | 
						|
public interface IEntity<TKey>
 | 
						|
{
 | 
						|
    abstract TKey Id { get; set; }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
public interface IEntitySeqId
 | 
						|
{
 | 
						|
    public Guid SeqId { get; set; }
 | 
						|
}
 | 
						|
 | 
						|
public abstract class Entity : IEntity<Guid>
 | 
						|
{
 | 
						|
    [Key]
 | 
						|
    
 | 
						|
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
 | 
						|
    public Guid Id { get; set; }
 | 
						|
 | 
						|
    #region 领域事件 仅仅允许通过提供的方法进行操作
 | 
						|
 | 
						|
    [JsonIgnore]
 | 
						|
    [NotMapped]
 | 
						|
    private readonly List<DomainEvent> _domainEvents = [];
 | 
						|
 | 
						|
    [JsonIgnore]
 | 
						|
    [NotMapped]
 | 
						|
    public IReadOnlyCollection<DomainEvent> 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 领域命令 当前事务一起处理的,触发操作
 | 
						|
 | 
						|
    [JsonIgnore]
 | 
						|
    private readonly List<DomainCommand> _domainCommands = [];
 | 
						|
 | 
						|
    [JsonIgnore]
 | 
						|
    [NotMapped]
 | 
						|
    public IReadOnlyCollection<DomainCommand> DomainCommands => _domainCommands.AsReadOnly();
 | 
						|
    public void AddDomainCommand(DomainCommand domainCommand)
 | 
						|
    {
 | 
						|
        _domainCommands.Add(domainCommand);
 | 
						|
    }
 | 
						|
 | 
						|
    public void RemoveDomainCommand(DomainCommand domainCommand)
 | 
						|
    {
 | 
						|
        _domainCommands.Remove(domainCommand);
 | 
						|
    }
 | 
						|
 | 
						|
    public void ClearDomainCommands()
 | 
						|
    {
 | 
						|
        _domainCommands.Clear();
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
}
 | 
						|
#region 减少实体属性,增加基类
 | 
						|
 | 
						|
public abstract class BaseAddAuditEntity : Entity, IAuditAdd
 | 
						|
{
 | 
						|
 | 
						|
    public Guid CreateUserId { get; set; }
 | 
						|
    public DateTime CreateTime { get; set; }
 | 
						|
 | 
						|
    [ForeignKey("CreateUserId")]
 | 
						|
    [JsonIgnore]
 | 
						|
    public virtual UserRole CreateUserRole { get; set; }
 | 
						|
}
 | 
						|
 | 
						|
public abstract class BaseAddDeleteAuditEntity : Entity, IAuditAdd, ISoftDelete
 | 
						|
{
 | 
						|
 | 
						|
    public Guid CreateUserId { get; set; }
 | 
						|
    public DateTime CreateTime { get; set; }
 | 
						|
    public Guid? DeleteUserId { get; set; }
 | 
						|
    public bool IsDeleted { get; set; }
 | 
						|
    public DateTime? DeletedTime { get; set; }
 | 
						|
 | 
						|
    [ForeignKey("CreateUserId")]
 | 
						|
    [JsonIgnore]
 | 
						|
    public UserRole CreateUserRole { 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; }
 | 
						|
 | 
						|
    [ForeignKey("CreateUserId")]
 | 
						|
    [JsonIgnore]
 | 
						|
    public UserRole CreateUserRole { get; set; }
 | 
						|
}
 | 
						|
public abstract class BaseFullDeleteAuditEntity : 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; }
 | 
						|
 | 
						|
    [ForeignKey("CreateUserId")]
 | 
						|
    [JsonIgnore]
 | 
						|
    public UserRole CreateUserRole { get; set; }
 | 
						|
}
 | 
						|
 | 
						|
public abstract class BaseAuditUpdateEntity : Entity, IAuditUpdate
 | 
						|
{
 | 
						|
    public Guid UpdateUserId { get; set; }
 | 
						|
    public DateTime UpdateTime { get; set; }
 | 
						|
}
 | 
						|
#endregion
 | 
						|
 |