irc-netcore-api/IRaCIS.Core.Domain/BaseModel/Entity.cs

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