新版本的PetaPoco使用特性进行注解的形式来代替的老版本的映射类的形式。新版本中使用的特性主要包括以下几种:
名称 |
| 用途 |
TableNameAttribute | Class | 指定POCO实体类对应的数据库表名称 |
ColumnAttribute | Property | 指定POCO实体类属性对应的数据库表列名称 |
PrimaryKeyAttribute | Class | 指定POCO实体类对应的数据库表的主键列 |
IgnoreAttribute | Property | 指定POCO实体类属性不与数据库表列名称对应 |
ResultColumnAttribute | Property | 指定POCO实体类属性作为结果信息,只在查询时使用,插入和更新时不更新该列 |
ExplicitColumnsAttribute | Class | 指定POCO实体类属性必须使用ColumnAttribute或ResultColumnAttribute明确指定。 |
ValueConverterAttribute | Property | 指定POCO实体类属性的类型与数据库列的类型的转换 |
- TableNameAttribute 数据库表名特性,只能应用于实体类
1 ///2 /// 该特性用来指定POCO实体类所对应的数据库表名 3 /// 4 [AttributeUsage(AttributeTargets.Class)] 5 public class TableNameAttribute : Attribute 6 { 7 ///8 /// 实体类对应的数据库表名称 9 /// 10 public string Value { get; private set; }11 12 ///13 /// 构造函数14 /// 15 public TableNameAttribute(string tableName)16 {17 Value = tableName;18 }19 }20 21 //使用事例22 [TableName("Person")]23 public class Person24 {25 26 }
- ColumnAttribute,数据库表列名特性,只能用于类的属性。
1 ///2 /// 该特性用于指定POCO实体类的属性对应的数据库表的列 3 /// 4 [AttributeUsage(AttributeTargets.Property)] 5 public class ColumnAttribute : Attribute 6 { 7 ///8 /// 数据库表的列名称 9 /// 10 public string Name { get; set; }11 12 ///13 /// 列对应的属性如果是DataTime类型,表示是否需要转换为UTC时间格式14 /// 15 public bool ForceToUtc { get; set; }16 17 ///18 /// 插入数据,将一些数据根据特定格式进行组合(暂未理解,后续添加)19 /// 20 public string InsertTemplate { get; set; }21 22 ///23 /// 更新数据,将一些数据根据特定格式进行组合(暂未理解,后续添加)24 /// 25 public string UpdateTemplate { get; set; }26 27 ///28 /// 构造函数 29 /// 30 public ColumnAttribute()31 {32 ForceToUtc = false;33 }34 35 ///36 /// 构造函数37 /// 38 public ColumnAttribute(string name)39 {40 Name = name;41 ForceToUtc = false;42 }43 }44 45 //使用事例46 [TableName("Person")]47 public class Person48 {49 [Column("id")]50 public string Id;51 }
- PrimaryKeyAttribute 数据库表主键列特性,只能用于类。
1 ///2 /// 该特性用于指定POCO实体类的属性对应的数据库表的列是否表的主键和自增信息 3 /// Oracle数据库还需要指定Sequence名称 4 /// 5 [AttributeUsage(AttributeTargets.Class)] 6 public class PrimaryKeyAttribute : Attribute 7 { 8 ///9 /// 数据库表的列名称10 /// 11 public string Value { get; private set; }12 13 ///14 /// Sequence名称15 /// 16 public string SequenceName { get; set; }17 18 ///19 /// 主键是否自增列20 /// 21 public bool AutoIncrement { get; set; }22 23 ///24 /// 构造函数25 /// 26 /// The name of the primary key column.27 public PrimaryKeyAttribute(string primaryKey)28 {29 Value = primaryKey;30 AutoIncrement = true;31 }32 }33 34 //使用事例35 [TableName("Person")]36 [PrimaryKey("id")]37 public class Person38 {39 [Column("id")]40 public string Id;41 }
- IgnoreAttribute类属性不与数据库表列名不进行对应特性,只能用于类的属性。
1 ///2 /// 该特性用于指定POCO实体类的属性不与数据库表的列进行对应 3 /// 4 [AttributeUsage(AttributeTargets.Property)] 5 public class IgnoreAttribute : Attribute 6 { 7 } 8 9 //使用事例10 [TableName("Person")]11 [PrimaryKey("id")]12 public class Person13 {14 [Column("id")]15 public string Id;16 17 [Ignore]18 public FullName;19 }
- ResultColumnAttribute数据库表列名特性,只能用于类的属性。
1 ///2 /// 该特性用于指定POCO实体类的属性作为数据库表列的结果信息,更新和查询操作时不对该列进行操作。 3 /// 4 [AttributeUsage(AttributeTargets.Property)] 5 public class ResultColumnAttribute : ColumnAttribute 6 { 7 ///8 /// 构造函数 9 /// 10 public ResultColumnAttribute()11 {12 }13 14 ///15 /// 构造函数16 /// 17 public ResultColumnAttribute(string name)18 : base(name)19 {20 }21 }22 23 /使用事例24 [TableName("Person")]25 [PrimaryKey("id")]26 public class Person27 {28 [Column("id")]29 public string Id;30 31 [Ignore]32 public string FullName;33 34 35 [Result]36 public Float AnnualSalary{ get { return Salary*14;}}37 }
- ExplicitColumnsAttribute POCO实体类特性,只能用于类的属性。
1 ///2 /// 该特性用于指定POCO实体类的属性使用ColumnAttribute或 ResultColumnAttribute明确指定对应关系。3 /// 4 [AttributeUsage(AttributeTargets.Class)]5 public class ExplicitColumnsAttribute : Attribute6 {7 }
- ValueConverterAttribute POCO实体类属性类型转换特性,只能用于类的属性
////// 该特性用于指定POCO实体类的属性的类型和数据库列类型进行转换 /// [AttributeUsage(AttributeTargets.Property)] public abstract class ValueConverterAttribute : Attribute { ////// 属性类型转换为数据库列类型 /// /// Property value ///Converted database value public abstract object ConvertToDb(object value); ////// 数据库列类型转换为属性类型 /// /// Database value ///Converted property type value public abstract object ConvertFromDb(object value); }