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 数据库表名特性,只能应用于实体类
/// <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介绍的更多相关文章
- PetaPoco源代码学习--0.目录贴
2017年3季度后,以人力外包的形式派驻到甲方单位进行项目救急时,接触到了甲方单位的ASP.NET MVC项目的ORM框架,它以PetaPoco(2012年的老版本)进行改造升级的,当初就想学习一下这 ...
- PetaPoco源代码学习--2.TableInfo、ColumnInfo类和Cache类
当把常用的特性填写到POCO实体类时,执行数据库操作时,需要根据实体类上的特性信息进行相应的操作,PetaPoco中的TableInfo和ColumnInfo类就是用来保存实体类上的特性信息. Tab ...
- PetaPoco源代码学习--3.Sql类
PetaPoco对数据库的操作直接使用SQL语句,在代码中进行调用既可以直接传递SQL语句,也可以使用提供的SQL类来获取到SQL语句进行操作,直接传递SQL语句在内部实现中也是封装成Sql类传递到底 ...
- 读Flask源代码学习Python--config原理
读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因 莫名其妙在第一份工作中使用了从来没有接 ...
- JDK源代码学习系列04----ArrayList
JDK源代码学习系列04----ArrayList 1 ...
- JDK源代码学习系列05----LinkedList
JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- struts2源代码学习之初始化(一)
看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...
随机推荐
- 程序员、技术领导、管理者各有烦恼,你占了几条?ZZ
Q1: 作为学生,你学习 SE的烦恼有哪些? http://blog.jobbole.com/101840/
- 经过实际验证的C#调用Haskell的方法
[系统环境] Windows Server 2008 R2,Haskell Platform 2013.2.0.0,ghc 7.6.3,cabal 1.16.0 [操作步骤] 1. 安装Windows ...
- python threading模块2
Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对 ...
- C# Winform 换肤
本来计划接着上篇 C# Winform模仿百度日历,发现一时半会写不完,只写了一小半还不全,暂且搁置下.现在计划下班后每天至少写一篇博客,未能完成的等周末(不加班都情况)补充完整. 本篇博客窗体换肤, ...
- BZOJ NOIP提高组十连测第一场
今天的题目一共拿了$180$分,感觉自己还是太菜了,二三两题只能骗到部分分 1.$String\ Master$ 题目大意:有两个字符串,在允许k次失配的情况下,求最长公共子串的长度 没什么好讲,直接 ...
- python爬虫实践教学
i春秋作家:Mochazz 一.前言 这篇文章之前是给新人培训时用的,大家觉的挺好理解的,所以就分享出来,与大家一起学习.如果你学过一些python,想用它做些什么又没有方向,不妨试试完成下面几个案例 ...
- 【Anaconda】:科学计算的Python发行版
[背景] Python易用,但包管理和Python不同版本的问题比较头疼,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.Anaconda等, ...
- centos7下elasticSearch安装配置
OS:Centos7x虚拟机 1H2Gjdk:1.8elasticsearch:5.6.0 1.下载“elasticsearch-5.6.0.tar.gz”解压到/usr/local/elastics ...
- 基于alpine用dockerfile创建的ssh镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- [Umbraco] Data Type之Render control
继续探讨Data Type.如果你创建过Data Type,你就会知道创建一个新的Data Type都需要指定一个Render control,这有点类似开始C#时用到的继承. 那么如何创建我们自己的 ...