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
{
   /// 
   /// 主键
   /// 
   [Key]
   [Identity]
   [Display(Name = @"主键")]
   public virtual Int32 FID { get; set; }

   /// 
   /// 姓名
   /// 
   [Display(Name = @"姓名")]
   public virtual String FName { get; set; }
    
   /// 
   /// 年龄
   /// 
   [Display(Name = @"年龄")]
   public virtual Int32?  FAage { get; set; }

   /// 
   /// 班级
   /// 
   [Display(Name = @"班级")]
   public virtual Int32? FClassId { get; set; }

   /// 
   /// 插入时间
   /// 
   [Display(Name = @"插入时间")]
   public virtual DateTime? FAddTime { get; set; }
   
  
   /// 
   /// 此为非数据库字段
   ///   
   public virtual String _notDataBaseFiled { get { return this.FName+this.FAage; }} //此字段为非数据库字段,虽然此字段存在数据库模型中,但是此字名称 第一个字符为下划线 ’_’, BTORM 在执行过程中,不会映射到数据库层面. 
 }

学分表-model:

[TableName("t_StudentScore")]
public class TStudentScoreInfo : BaseModel
{
   /// 
   /// 主键
   /// 
   [Key]
   [Identity]
   [Display(Name = @"主键")]
   public virtual Int32 FID { get; set; }

   /// 
   /// 
   /// 
   [Display(Name = @"学生Id")]
   public virtual Int32? FStudentId { get; set; }

   /// 
   /// 
   /// 
   [Display(Name = @"学分")]
   public virtual Int32? FScore { get; set; }

   /// 
   /// 插入时间
   /// 
   [Display(Name = @"插入时间")]
   public virtual DateTime? FAddTime { get; set; }

}

年级表-model:

[TableName("t_Grade")]
public class TGRADEInfo : BaseModel
{
   /// 
   /// 主键
   /// 
   [Key]
   [Identity]
   [Display(Name = @"主键")]
   public virtual Int32 FID { get; set; }

   /// 
   /// 年级名称
   /// 
   [Display(Name = @"年级名称")]
   public virtual String FName { get; set; }

   /// 
   /// 插入时间
   /// 
   [Display(Name = @"插入时间")]
   public virtual DateTime? FAddTime { get; set; }


}

班级-model:

[TableName("t_class")]
public class TClassInfo : BaseModel
{
   /// 
   /// 主键
   /// 
   [Key]
   [Identity]
   [Display(Name = @"主键")]
   public virtual Int32 FID { get; set; }

   /// 
   /// 班级名称
   /// 
   [Display(Name = @"班级名称")]
   public virtual String FName { get; set; }

   /// 
   /// 年级Id
   /// 
   [Display(Name = @"年级Id")]
   public virtual Int32? FGradeId { get; set; }

   /// 
   /// 插入时间
   /// 
   [Display(Name = @"插入时间")]
   public virtual DateTime? FAddTime { get; set; }

}