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介绍的主要内容,如果未能解决你的问题,请参考以下文章

PetaPoco vs NPoco

PetaPojo —— JAVA版的PetaPoco

PETAPOCO - 无效的对象名称

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)

PetaPoco模糊查询

轻量级ORM——PetaPoco