YiShaAdmin数据库设计:Entity类与表结构映射关系详解
在基于.NET Core MVC的权限管理系统YiShaAdmin中,数据持久化层的设计直接影响系统性能与可维护性。本文将从实际应用角度出发,详解Entity类与数据库表结构的映射关系,帮助开发人员快速掌握数据模型设计规范。通过本文你将了解:数据注解与Fluent API两种映射方式的应用场景、Entity类与表结构的对应规则、以及如何通过代码生成工具实现映射关系的自动化维护。
映射关系基础架构
YiShaAdmin采用Entity Framework Core(实体框架核心)实现数据访问,通过约定优先的设计原则减少配置代码。系统将数据实体分为组织管理(OrganizationManage)和系统管理(SystemManage)两大模块,分别对应数据库中的业务表和系统表。
核心实现文件分布如下:
- 实体类定义:YiSha.Entity/YiSha.Entity/
- 数据库上下文:YiSha.Data/YiSha.Data.EF/DbContext/
- 数据库脚本:Document/DatabaseScript/
数据注解映射方式
表名映射
通过[Table]特性指定实体类对应的数据库表名,如用户实体映射到SysUser表:
[Table("SysUser")]
public class UserEntity : BaseExtensionEntity
{
// 字段定义
}
字段映射
使用[Column]特性自定义字段名,[Description]添加字段说明,[NotMapped]标记非数据库字段:
[Description("用户名")]
public string UserName { get; set; }
[NotMapped]
public string DepartmentName { get; set; }
主键与基础字段
所有实体类继承自BaseExtensionEntity,该基类定义了系统级字段(如Id、BaseCreateTime),无需在子类重复定义。主键默认采用Id字段,类型为bigint。
Fluent API配置方式
当需要更复杂的映射规则时,系统在DbContext中通过Fluent API进行配置。MySqlDbContext采用反射机制自动注册所有带[Table]特性的实体:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
Assembly entityAssembly = Assembly.Load(new AssemblyName("YiSha.Entity"));
IEnumerable<Type> typesToRegister = entityAssembly.GetTypes()
.Where(p => !string.IsNullOrEmpty(p.GetCustomAttribute<TableAttribute>()?.Name));
foreach (Type type in typesToRegister)
{
modelBuilder.Model.AddEntityType(type);
}
// 主键约定配置
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
PrimaryKeyConvention.SetPrimaryKey(modelBuilder, entity.Name);
}
}
映射关系对照表
以用户模块为例,展示Entity类与数据库表的核心映射关系:
| Entity属性 | 数据库字段 | 类型 | 说明 |
|---|---|---|---|
| UserName | UserName | varchar(20) | 用户名 |
| Password | Password | varchar(32) | 加密存储的密码 |
| DepartmentId | DepartmentId | bigint | 外键关联部门表 |
| UserStatus | UserStatus | int | 用户状态(0禁用 1启用) |
| [NotMapped] DepartmentName | - | - | 非数据库字段,用于联表查询 |
完整表结构定义参见:mysql.sql
枚举类型映射
系统使用枚举类型规范状态字段取值,如任务状态枚举AutoJobStatusEnum对应数据库中的JobStatus字段:
// 枚举定义:YiSha.Enum/SystemManage/AutoJobStatusEnum.cs
public enum AutoJobStatusEnum
{
[Description("禁用")]
Disable = 0,
[Description("启用")]
Enable = 1
}
枚举值直接以整数形式存储在数据库,通过Description特性实现UI显示与存储值的分离。
映射关系维护最佳实践
- 命名规范:实体类采用
XXXEntity命名,对应表名使用Sys_XXX或XXX前缀 - 字段类型:字符串统一使用
varchar而非nvarchar,减少存储空间 - 审计字段:所有表必须包含基础审计字段(创建时间、修改人等)
- 索引设计:外键字段(如
DepartmentId)需添加索引提升查询性能
通过遵循以上规范,YiShaAdmin实现了实体模型与数据库结构的清晰映射,为系统提供了可靠的数据访问基础。开发人员可通过代码生成器快速创建符合规范的实体类与数据库脚本,进一步提升开发效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





