实体类是 LiteOrm 与数据库表之间的映射基础。本文介绍实体定义、表列映射、多数据源和分表参数等核心规则。
[Table("Users")]
public class User
{
[Column("Id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[Column("UserName")]
public string? UserName { get; set; }
[Column("Age")]
public int Age { get; set; }
[Column("DeptId")]
public int? DeptId { get; set; }
[Column("CreateTime")]
public DateTime CreateTime { get; set; }
}
ObjectBase是可选基类,不继承也可以正常使用 LiteOrm。
[Table] 特性[Table("Users")]
[Table("Logs_{0}", DataSource = "LogDB")]
| 参数 | 说明 |
|---|---|
Name |
数据库表名,支持占位符分表。 |
DataSource |
指定当前实体所属数据源。 |
[Column] 特性[Column("Id", IsPrimaryKey = true, IsIdentity = true)]
[Column("Profile", DataType = typeof(UserProfile))]
| 参数 | 说明 |
|---|---|
Name |
数据库列名。 |
IsPrimaryKey |
是否主键。 |
IsIdentity |
是否自增列。 |
DataType |
序列化类型,用于复杂对象存储。 |
[PropertyOrder] 特性用于控制实体属性在数据库操作(如建表、生成 SQL 列列表)中的排列顺序。
[Table("Users")]
public class User
{
[PropertyOrder(1)]
[Column("Id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[PropertyOrder(2)]
[Column("UserName")]
public string? UserName { get; set; }
[PropertyOrder(After = nameof(DeptId))]
[Column("Age")]
public int Age { get; set; }
[PropertyOrder(0)]
[Column("DeptId")]
public int? DeptId { get; set; }
}
| 参数 | 说明 |
|---|---|
Order |
排序优先级,数值越小越靠前,默认值为 0。同一拓扑层级中 Order 值较小的属性优先排列。 |
After |
指定属性名,指示当前属性应排在该属性之后。 |
Before |
指定属性名,指示当前属性应排在该属性之前。 |
排序规则:首先按 Before/After 指定的拓扑依赖关系排序,同一层级按 Order 值升序排列,最后按属性原始声明顺序排列。当检测到循环依赖时,将抛出
InvalidOperationException异常。
如果项目中存在多个数据源,可以在实体上显式标注:
[Table("Orders", DataSource = "OrderDb")]
public class Order
{
}
这样该实体的默认读写都会走 OrderDb 数据源。
IArged当表名中包含占位符时,可通过 IArged 提供动态分表参数:
[Table("Logs_{0}")]
public class Log : IArged
{
[Column("CreateTime")]
public DateTime CreateTime { get; set; }
string[] IArged.TableArgs => new[] { CreateTime.ToString("yyyyMM") };
}
更多内容请阅读 分表分库与 TableArgs。