PetaPoco源代码学习--1.使用的Attribute介绍
Posted 生命梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PetaPoco源代码学习--1.使用的Attribute介绍相关的知识,希望对你有一定的参考价值。
新版本的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 /// <summary> 2 /// 该特性用来指定POCO实体类所对应的数据库表名 3 /// </summary> 4 [AttributeUsage(AttributeTargets.Class)] 5 public class TableNameAttribute : Attribute 6 { 7 /// <summary> 8 /// 实体类对应的数据库表名称 9 /// </summary> 10 public string Value { get; private set; } 11 12 /// <summary> 13 /// 构造函数 14 /// </summary> 15 public TableNameAttribute(string tableName) 16 { 17 Value = tableName; 18 } 19 } 20 21 //使用事例 22 [TableName("Person")] 23 public class Person 24 { 25 26 }
- ColumnAttribute,数据库表列名特性,只能用于类的属性。
1 /// <summary> 2 /// 该特性用于指定POCO实体类的属性对应的数据库表的列 3 /// </summary> 4 [AttributeUsage(AttributeTargets.Property)] 5 public class ColumnAttribute : Attribute 6 { 7 /// <summary> 8 /// 数据库表的列名称 9 /// </summary> 10 public string Name { get; set; } 11 12 /// <summary> 13 /// 列对应的属性如果是DataTime类型,表示是否需要转换为UTC时间格式 14 /// </summary> 15 public bool ForceToUtc { get; set; } 16 17 /// <summary> 18 /// 插入数据,将一些数据根据特定格式进行组合(暂未理解,后续添加) 19 /// </summary> 20 public string InsertTemplate { get; set; } 21 22 /// <summary> 23 /// 更新数据,将一些数据根据特定格式进行组合(暂未理解,后续添加) 24 /// </summary> 25 public string UpdateTemplate { get; set; } 26 27 /// <summary> 28 /// 构造函数 29 /// </summary> 30 public ColumnAttribute() 31 { 32 ForceToUtc = false; 33 } 34 35 /// <summary> 36 /// 构造函数 37 /// </summary> 38 public ColumnAttribute(string name) 39 { 40 Name = name; 41 ForceToUtc = false; 42 } 43 } 44 45 //使用事例 46 [TableName("Person")] 47 public class Person 48 { 49 [Column("id")] 50 public string Id; 51 }
- PrimaryKeyAttribute 数据库表主键列特性,只能用于类。
1 /// <summary> 2 /// 该特性用于指定POCO实体类的属性对应的数据库表的列是否表的主键和自增信息 3 /// Oracle数据库还需要指定Sequence名称 4 /// </summary> 5 [AttributeUsage(AttributeTargets.Class)] 6 public class PrimaryKeyAttribute : Attribute 7 { 8 /// <summary> 9 /// 数据库表的列名称 10 /// </summary> 11 public string Value { get; private set; } 12 13 /// <summary> 14 /// Sequence名称 15 /// </summary> 16 public string SequenceName { get; set; } 17 18 /// <summary> 19 /// 主键是否自增列 20 /// </summary> 21 public bool AutoIncrement { get; set; } 22 23 /// <summary> 24 /// 构造函数 25 /// </summary> 26 /// <param name="primaryKey">The name of the primary key column.</param> 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 Person 38 { 39 [Column("id")] 40 public string Id; 41 }
- IgnoreAttribute类属性不与数据库表列名不进行对应特性,只能用于类的属性。
1 /// <summary> 2 /// 该特性用于指定POCO实体类的属性不与数据库表的列进行对应 3 /// </summary> 4 [AttributeUsage(AttributeTargets.Property)] 5 public class IgnoreAttribute : Attribute 6 { 7 } 8 9 //使用事例 10 [TableName("Person")] 11 [PrimaryKey("id")] 12 public class Person 13 { 14 [Column("id")] 15 public string Id; 16 17 [Ignore] 18 public FullName; 19 }
- ResultColumnAttribute数据库表列名特性,只能用于类的属性。
1 /// <summary> 2 /// 该特性用于指定POCO实体类的属性作为数据库表列的结果信息,更新和查询操作时不对该列进行操作。 3 /// </summary> 4 [AttributeUsage(AttributeTargets.Property)] 5 public class ResultColumnAttribute : ColumnAttribute 6 { 7 /// <summary> 8 /// 构造函数 9 /// </summary> 10 public ResultColumnAttribute() 11 { 12 } 13 14 /// <summary> 15 /// 构造函数 16 /// </summary> 17 public ResultColumnAttribute(string name) 18 : base(name) 19 { 20 } 21 } 22 23 /使用事例 24 [TableName("Person")] 25 [PrimaryKey("id")] 26 public class Person 27 { 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 /// <summary> 2 /// 该特性用于指定POCO实体类的属性使用ColumnAttribute或 ResultColumnAttribute明确指定对应关系。 3 /// </summary> 4 [AttributeUsage(AttributeTargets.Class)] 5 public class ExplicitColumnsAttribute : Attribute 6 { 7 }
- ValueConverterAttribute POCO实体类属性类型转换特性,只能用于类的属性
/// <summary> /// 该特性用于指定POCO实体类的属性的类型和数据库列类型进行转换 /// </summary> [AttributeUsage(AttributeTargets.Property)] public abstract class ValueConverterAttribute : Attribute { /// <summary> /// 属性类型转换为数据库列类型 /// </summary> /// <param name="value">Property value</param> /// <returns>Converted database value</returns> public abstract object ConvertToDb(object value); /// <summary> /// 数据库列类型转换为属性类型 /// </summary> /// <param name="value">Database value</param> /// <returns>Converted property type value</returns> public abstract object ConvertFromDb(object value); }
以上是关于PetaPoco源代码学习--1.使用的Attribute介绍的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)