新版本的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. C# .NET 获取枚举值的自定义属性

    一.定义一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  2. C# 用户选择单个压缩-系统自带压缩

    //用C#自带的压缩,最少要.net4.5或以上,先增加引用 System.IO.Compression.FileSystem // FolderBrowserDialog dlg = new Fol ...

  3. 你所不知道的ASP.NET Core MVC/WebApi基础系列 (一)

    转自博客:https://www.cnblogs.com/CreateMyself/p/9235968.html 前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时 ...

  4. 跟着刚哥深入学maven(通俗易懂)

    前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下. 一.为什么使用Maven这样的构建工具[why] ① 一个项目就是一个工程 如果项目非常庞大,就 ...

  5. Dubbo原理实现之使用Javassist字节码结束构建代理对象

    JavassistProxyFactory利用自己吗技术构建代理对象的实现如下: public <T> T getProxy(Invoker<T> invoker, Class ...

  6. D3.js(v3)+react框架 基础部分之数据绑定及其工作过程与绑定顺序

    数据绑定: 将数据绑定到Dom上,是D3最大的特色.d3.select和d3.selectAll返回的元素的选择集.选择集上是没有数据的. 数据绑定就是使被选择元素里“含有”数据. 相关函数有两个: ...

  7. xamarin android 实现二维码带logo生成效果

    MultiFormatWriter writer = new MultiFormatWriter(); Dictionary<EncodeHintType, object> hint = ...

  8. Python动态变量名定义与调用

    动态变量名赋值 在使用tkinter时需要动态生成变量,如动态生成var1...var10变量 使用exec动态赋值 exec在python3中是内置函数,它支持python代码的动态执行. 示例: ...

  9. (转载)Centos下Elasticsearch安装详细教程

    原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...

  10. 推荐几个 WebSocket 服务端实现

    http://netty.io/http://socket.io/https://github.com/StackExchange/NetGainhttps://github.com/SignalR/ ...