// ============================================================================
// 【文件说明】HwPortalBaseEntity.cs - 门户模块实体基类
// ============================================================================
// 这个文件定义了所有门户实体的"公共字段基类"。
// 在 Java Spring Boot 项目中,你可能会用 @MappedSuperclass 注解一个 BaseEntity,
// 然后让其他实体类继承它。这里的概念完全一样!
// ============================================================================
namespace Admin.NET.Plugin.HwPortal;
///
/// 门户模块实体基类。
///
/// 【C# 语法知识点 - abstract 关键字】
/// abstract 表示"抽象类",和 Java 的 abstract class 含义完全一致:
/// - 不能直接 new 实例化,只能被继承
/// - 可以包含抽象方法(没有实现体)和具体方法(有实现体)
/// - 子类必须实现所有抽象成员
///
///
/// 【与 Java Spring Boot 的对比】
/// Java: @MappedSuperclass public class BaseEntity { ... }
/// C#: public abstract class HwPortalBaseEntity { ... }
/// 两者目的相同:把公共字段抽取到父类,避免每个实体都重复定义 create_by、create_time 等字段。
///
///
public abstract class HwPortalBaseEntity
{
///
/// 创建人。
///
/// 【C# 语法知识点 - 属性(Property)】
/// public string CreateBy { get; set; } 是 C# 的"自动属性"语法。
/// 编译器会自动生成一个私有的后备字段(backing field)和 get/set 方法。
///
/// 对比 Java:
/// Java 需要手写:
/// private String createBy;
/// public String getCreateBy() { return createBy; }
/// public void setCreateBy(String createBy) { this.createBy = createBy; }
///
/// C# 只需要一行:
/// public string CreateBy { get; set; }
///
/// 这就是 C# 的"语法糖"——让代码更简洁,编译器帮你生成繁琐的部分。
///
///
[SugarColumn(ColumnName = "create_by")]
// 【C# 语法知识点 - 特性(Attribute)】
// [SugarColumn(...)] 是 SqlSugar ORM 的特性,用于映射数据库列名。
// 特性相当于 Java 的注解(Annotation),写法是方括号 [] 而不是 @。
//
// Java 写法:@Column(name = "create_by")
// C# 写法:[SugarColumn(ColumnName = "create_by")]
//
// 这里为什么要写 ColumnName = "create_by"?
// 因为 C# 的命名规范是 PascalCase(首字母大写),但数据库列名是 snake_case(小写+下划线)。
// 如果不指定映射,SqlSugar 会默认把 CreateBy 映射成 CreateBy 列(大写开头),
// 这在 MySQL(Linux 环境,区分大小写)下会报错"列不存在"。
public string CreateBy { get; set; }
///
/// 创建时间。
///
/// 【C# 语法知识点 - 可空值类型 DateTime?】
/// DateTime 是值类型(struct),不能为 null。
/// 但数据库里的 create_time 可能是 NULL(比如老数据没填)。
///
/// DateTime? 是"可空 DateTime",等价于 Nullable<DateTime>。
/// 它可以是具体的日期时间,也可以是 null。
///
/// 对比 Java:
/// Java 的 Date 本身就是引用类型,可以直接 null。
/// C# 把日期作为值类型是为了性能,但这就需要 Nullable<T> 来支持 null。
///
///
[SugarColumn(ColumnName = "create_time")]
public DateTime? CreateTime { get; set; }
///
/// 更新人。
///
[SugarColumn(ColumnName = "update_by")]
public string UpdateBy { get; set; }
///
/// 更新时间。
///
[SugarColumn(ColumnName = "update_time")]
public DateTime? UpdateTime { get; set; }
///
/// 备注信息。
///
[SugarColumn(ColumnName = "remark")]
public string Remark { get; set; }
}