// ============================================================================ // 【文件说明】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; } }