Bitter.Core系列三:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例模型创建
在具体数据库操作之前,我们先准备好四张表以及相对应数据库操作模型: 学生表,年级表,班级表,学分表。示例数据库表,如下代码(MSSQL 为例)
--学生表 CREATE TABLE t_student ( FID INT IDENTITY(1,1) PRIMARY KEY, --主键 FName VARCHAR(100), --名称 FAage INT,--年龄 FClassId INT, --班级Id FAddTime DATETIME DEFAULT GETDATE() ) --学分表 CREATE TABLE t_StudentScore ( FID INT IDENTITY(1,1) PRIMARY KEY, --主键 FStudentId INT, --学生 FScore INT, --分数 FAddTime DATETIME DEFAULT GETDATE() ) --班级表 CREATE TABLE t_class ( FID INT IDENTITY(1,1) PRIMARY KEY, --主键 FName VARCHAR(100), --班级名称 FGradeId INT, --年级 FAddTime DATETIME DEFAULT GETDATE(), ) --年级表 CREATE TABLE t_Grade ( FID INT IDENTITY(1,1) PRIMARY KEY,--主键 FName VARCHAR(100),--年级名称 FAddTime DATETIME DEFAULT GETDATE(), )
创建对应的 BTORM 数据库模型
备注NOTIC:
- BTORM 数据库模型必须继承自 Bitter 框架中的 BaseModel 类。
- 模型必须导入命名空间:BT.Manage.Core 和 BT.Manage.Tools.Attributes。
- 字段建议加上 virtual 属性如: public virtual Int32? FStudentId { get; set; } 高级功能中--字段变更收集器中会用到 --- 此条为非必要,建议加上 virtual 属性
- 模型必须有自增长主键,并且主键类型为int identity 类型 与EF 类似,主键上必须写上字段属性[Key] 和 [Identity] 属性,Bitter orm 框架才能识别此字段为主键并且是自增长
- 模型必须指定物理表名:在模型类名上打上类标签属性: [TableName("tablename")]
- 模型中 第一个字符 为 ‘_’的字段,BTORM 认为此此段不是数据库的映射字段。如下面学生 学生表-model 中的 _notDataBaseFiled 字段。
学生表-model:
[TableName("t_student")] public class TStudentInfo : BaseModel { /// <summary> /// 主键 /// </summary> [Key] [Identity] [Display(Name = @"主键")] public virtual Int32 FID { get; set; } /// <summary> /// 姓名 /// </summary> [Display(Name = @"姓名")] public virtual String FName { get; set; } /// <summary> /// 年龄 /// </summary> [Display(Name = @"年龄")] public virtual Int32? FAage { get; set; } /// <summary> /// 班级 /// </summary> [Display(Name = @"班级")] public virtual Int32? FClassId { get; set; } /// <summary> /// 插入时间 /// </summary> [Display(Name = @"插入时间")] public virtual DateTime? FAddTime { get; set; } /// <summary> /// 此为非数据库字段 /// </summary> public virtual String _notDataBaseFiled { get { return this.FName+this.FAage; }} //此字段为非数据库字段,虽然此字段存在数据库模型中,但是此字名称 第一个字符为下划线 ’_’, BTORM 在执行过程中,不会映射到数据库层面. }
学分表-model:
[TableName("t_StudentScore")] public class TStudentScoreInfo : BaseModel { /// <summary> /// 主键 /// </summary> [Key] [Identity] [Display(Name = @"主键")] public virtual Int32 FID { get; set; } /// <summary> /// /// </summary> [Display(Name = @"学生Id")] public virtual Int32? FStudentId { get; set; } /// <summary> /// /// </summary> [Display(Name = @"学分")] public virtual Int32? FScore { get; set; } /// <summary> /// 插入时间 /// </summary> [Display(Name = @"插入时间")] public virtual DateTime? FAddTime { get; set; } }
年级表-model:
[TableName("t_Grade")] public class TGRADEInfo : BaseModel { /// <summary> /// 主键 /// </summary> [Key] [Identity] [Display(Name = @"主键")] public virtual Int32 FID { get; set; } /// <summary> /// 年级名称 /// </summary> [Display(Name = @"年级名称")] public virtual String FName { get; set; } /// <summary> /// 插入时间 /// </summary> [Display(Name = @"插入时间")] public virtual DateTime? FAddTime { get; set; }
}
班级-model:
[TableName("t_class")] public class TClassInfo : BaseModel { /// <summary> /// 主键 /// </summary> [Key] [Identity] [Display(Name = @"主键")] public virtual Int32 FID { get; set; } /// <summary> /// 班级名称 /// </summary> [Display(Name = @"班级名称")] public virtual String FName { get; set; } /// <summary> /// 年级Id /// </summary> [Display(Name = @"年级Id")] public virtual Int32? FGradeId { get; set; } /// <summary> /// 插入时间 /// </summary> [Display(Name = @"插入时间")] public virtual DateTime? FAddTime { get; set; } }