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须 ...
随机推荐
- UITableView横向滚动
UITableView 设置 CGRect tableViewRect = CGRectMake(0.0, 0.0, 50.0, 320.0); self.tableView = [[UITableV ...
- VIM 实现tab标签页及分屏,切换命令
1,在一个窗口中,VIM 的小tab标签页命令: :tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab :tabc 关闭当前的tab ...
- 《AngularJs实战》学习笔记(慕课网)
1. Controller使用过程中的注意点 不要试图去复用Controller, 一个控制器一般只负责一小块视图 不要在Controller中操作DOM, 这不是控制器的职责. 封装在指令里. 不要 ...
- Select count(*)、Count(1)、Count(0)的区别和执行效率比较
记得很早以前就有人跟我说过,在使用count的时候要用count(1)而不要用count(*),因为使用count(*)的时候会对所有的列进行扫描,相比而言count(1)不用扫描所有列,所以coun ...
- cad.net之ACAD和GCAD环境变量获取
#if AC2006 || AC2007 || AC2008 || AC2009 || AC2010 || AC2011 || AC2012 [System.Security.SuppressUnma ...
- time clock getrusage clock_gettime gettimeofday timespec_get 对比
http://stackoverflow.com/questions/12392278/measure-time-in-linux-time-vs-clock-vs-getrusage-vs-cloc ...
- Codeforces Round #425 (Div. 2) B. Petya and Exam(字符串模拟 水)
题目链接:http://codeforces.com/contest/832/problem/B B. Petya and Exam time limit per test 2 seconds mem ...
- java爬虫学习
一.java爬取数据 示例:爬取网站中的所有古风网名:http://www.oicq88.com/gufeng/,并储存入数据库(mysql) jdk版本:jdk1.8 编辑器:idea 项目构建:m ...
- C++:复制构造函数
关于复制构造函数的具体细节:浅层复制和深层复制等可以看下 范磊老师的<零起点学通C++>视频教程和<C++ Primer Plus>一书. 相信看完后,对复制构造函数能基本掌握 ...
- 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...