新版本的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 数据库表名特性,只能应用于实体类
     /// <summary>
/// 该特性用来指定POCO实体类所对应的数据库表名
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class TableNameAttribute : Attribute
{
/// <summary>
/// 实体类对应的数据库表名称
/// </summary>
public string Value { get; private set; } /// <summary>
/// 构造函数
/// </summary>
public TableNameAttribute(string tableName)
{
Value = tableName;
}
} //使用事例
[TableName("Person")]
public class Person
{ }
  • ColumnAttribute,数据库表列名特性,只能用于类的属性。
     /// <summary>
/// 该特性用于指定POCO实体类的属性对应的数据库表的列
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute : Attribute
{
/// <summary>
/// 数据库表的列名称
/// </summary>
public string Name { get; set; } /// <summary>
/// 列对应的属性如果是DataTime类型,表示是否需要转换为UTC时间格式
/// </summary>
public bool ForceToUtc { get; set; } /// <summary>
/// 插入数据,将一些数据根据特定格式进行组合(暂未理解,后续添加)
/// </summary>
public string InsertTemplate { get; set; } /// <summary>
/// 更新数据,将一些数据根据特定格式进行组合(暂未理解,后续添加)
/// </summary>
public string UpdateTemplate { get; set; } /// <summary>
/// 构造函数
/// </summary>
public ColumnAttribute()
{
ForceToUtc = false;
} /// <summary>
/// 构造函数
/// </summary>
public ColumnAttribute(string name)
{
Name = name;
ForceToUtc = false;
}
} //使用事例
[TableName("Person")]
public class Person
{
[Column("id")]
public string Id;
}
  • PrimaryKeyAttribute 数据库表主键列特性,只能用于类。
     /// <summary>
/// 该特性用于指定POCO实体类的属性对应的数据库表的列是否表的主键和自增信息
/// Oracle数据库还需要指定Sequence名称
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class PrimaryKeyAttribute : Attribute
{
/// <summary>
/// 数据库表的列名称
/// </summary>
public string Value { get; private set; } /// <summary>
/// Sequence名称
/// </summary>
public string SequenceName { get; set; } /// <summary>
/// 主键是否自增列
/// </summary>
public bool AutoIncrement { get; set; } /// <summary>
/// 构造函数
/// </summary>
/// <param name="primaryKey">The name of the primary key column.</param>
public PrimaryKeyAttribute(string primaryKey)
{
Value = primaryKey;
AutoIncrement = true;
}
} //使用事例
[TableName("Person")]
[PrimaryKey("id")]
public class Person
{
[Column("id")]
public string Id;
}
  • IgnoreAttribute类属性不与数据库表列名不进行对应特性,只能用于类的属性。
     /// <summary>
/// 该特性用于指定POCO实体类的属性不与数据库表的列进行对应
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class IgnoreAttribute : Attribute
{
} //使用事例
[TableName("Person")]
[PrimaryKey("id")]
public class Person
{
[Column("id")]
public string Id; [Ignore]
public FullName;
}
  • ResultColumnAttribute数据库表列名特性,只能用于类的属性。
     /// <summary>
/// 该特性用于指定POCO实体类的属性作为数据库表列的结果信息,更新和查询操作时不对该列进行操作。
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ResultColumnAttribute : ColumnAttribute
{
/// <summary>
/// 构造函数
/// </summary>
public ResultColumnAttribute()
{
} /// <summary>
/// 构造函数
/// </summary>
public ResultColumnAttribute(string name)
: base(name)
{
}
} /使用事例
[TableName("Person")]
[PrimaryKey("id")]
public class Person
{
[Column("id")]
public string Id; [Ignore]
public string FullName; [Result]
public Float AnnualSalary{ get {return Salary*;}}
}
  • ExplicitColumnsAttribute POCO实体类特性,只能用于类的属性。
     /// <summary>
/// 该特性用于指定POCO实体类的属性使用ColumnAttribute或 ResultColumnAttribute明确指定对应关系。
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class ExplicitColumnsAttribute : Attribute
{
}
  • 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介绍的更多相关文章

  1. PetaPoco源代码学习--0.目录贴

    2017年3季度后,以人力外包的形式派驻到甲方单位进行项目救急时,接触到了甲方单位的ASP.NET MVC项目的ORM框架,它以PetaPoco(2012年的老版本)进行改造升级的,当初就想学习一下这 ...

  2. PetaPoco源代码学习--2.TableInfo、ColumnInfo类和Cache类

    当把常用的特性填写到POCO实体类时,执行数据库操作时,需要根据实体类上的特性信息进行相应的操作,PetaPoco中的TableInfo和ColumnInfo类就是用来保存实体类上的特性信息. Tab ...

  3. PetaPoco源代码学习--3.Sql类

    PetaPoco对数据库的操作直接使用SQL语句,在代码中进行调用既可以直接传递SQL语句,也可以使用提供的SQL类来获取到SQL语句进行操作,直接传递SQL语句在内部实现中也是封装成Sql类传递到底 ...

  4. 读Flask源代码学习Python--config原理

    读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因   莫名其妙在第一份工作中使用了从来没有接 ...

  5. JDK源代码学习系列04----ArrayList

                                                                             JDK源代码学习系列04----ArrayList 1 ...

  6. JDK源代码学习系列05----LinkedList

                                             JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...

  7. jQuery源代码学习笔记_工具函数_noop/error/now/trim

    jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...

  8. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  9. struts2源代码学习之初始化(一)

    看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...

随机推荐

  1. ThreadLocal实现线程级上下文

    一.ThreadLocal测试 package com.junge.threadlocal.context; /** * @author Administrator * */ public class ...

  2. C#实时检测端口占用情况

    在TCP/IP协议中,服务端需要去监听客户端的端口,开始监听,我们需要检测使用的端口是否被占用,获取系统当前使用的所有端口号,用此端口进行匹配即可. 代码如下 internal static Bool ...

  3. OCP考试062题库出现大量新题-18

    choose two Examine this command executed on a client that is remote from the database server. SQL> ...

  4. 36_并发编程-multiprocess模块

    仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的 ...

  5. 带你走进二进制-一次APT攻击分析

    原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋   引言;   这是一次来自遥远国 ...

  6. 套接字:Socket

    在进行通信之前,一般要先建立Socket连接,Socket编程是端到端的通信,往往意识不到中间经过了多少局域网,多少路由器,他能操作的是端到端协议之上的网络层和传输层. 在网络层,Socket函数可以 ...

  7. tomcat服务的启动与隐藏启动(win)

    一:  tomcat的启动与隐藏启动 1. 正常启动:D:\apache-tomcat-8.5.24\bin中的   startup.bat  双击启动 2. 启动tomcat服务后,window下方 ...

  8. flask框架1

    说flask框架之前,必须得提一下web框架,他的作用是为了利用互联网交流工作文档,我们为什么要使用框架,因为框架的稳定性和可扩展性强并且可以降低开发难度,提高开发效率.总的来说就是避免做无用功,重复 ...

  9. 【sping揭秘】3、Spring容器中bean默认是保持一个实例

    Spring容器中bean默认是保持一个实例 这里做一个测试,基础代码 package cn.cutter.start.provider; import org.springframework.con ...

  10. Python:抓取百度SERP搜索结果页的网站标题信息

    比如,你想采集标题中包含“58同城”的SERP结果,并过滤包含有“北京”或“厦门”等结果数据. 该Python脚本主要是实现以上功能. 其中,使用BeautifulSoup来解析HTML,可以参考我的 ...