新版本的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. [leet code 100] same tree

    1 题目 Given two binary trees, write a function to check if they are equal or not. Two binary trees ar ...

  2. 工作随笔——elasticsearch数据冷热分离、数据冷备

    概述: 适合日志类型的数据存储方案.即当日数据写入,历史数据只读. 节省部分硬件成本.热数据采用更好的硬件. 环境: 已有6个ES节点,使用docker-compose方式搭建. es1:master ...

  3. Canvas教程

    一.Canvas基本用法 canvas对应中文是“画布”,<canvas>是HTML5的新元素,IE9+支持 canvas元素的默认大小是300px * 150px,最简单的代码将生成一个 ...

  4. ADO.NET系列之事务和调用存储过程

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 前几篇我们介绍了Conne ...

  5. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  6. 18_python_类关系

    一.类与类之间的关系          1.依赖关系 class Elephant: def __init__(self, name): self.name = name def open(self, ...

  7. 10_python_函数进阶

    一.函数参数-动态参数 形参:位置参数.默认值参数.动态参数 动态参数分为两种:动态接收位置参数 *args  .动态接收关键字参数 *kwargs     1. *args def chi(*foo ...

  8. One difference between AngularJS' $location and window.location

    Recenently, I encountered a problem. Client side code is: $http({ url: "/api/runtimelicense&quo ...

  9. odoo开发环境搭建(四):python开发工具IDE pycharm配置

    odoo开发环境搭建(四):python开发工具IDE pycharm配置

  10. Error: insufficient funds for gas * price + value

    有位同学今天用 web3+infura 获取 Rinkeby测试网络 的账号信息,报错如下: (node:18356) UnhandledPromiseRejectionWarning: Error: ...