petaPoco
petaPoco出现在2011年...因此老鸟可忽略该贴...目前最新版是 5.0, 但核心文件变化不大.
在众多的ORM框架中, 其中不乏非常优秀的EF, 但今天仍然想写点关于PetaPoco的文字 ... 是因为有几个项目一直在使用petaPoco, 原因有2点:
1. 轻量级, 高性能
2. 个人偏向DataBase First的开发方式, 原因在于Toad for Oracle工具创建数据库对象迅速, 各种方便, 胜过Code First模式创建类的速度.(此处抛开各种设计模式,各种理论).
------------------------------------------------------------------------------
开发准备:
1.通过Nuget添加 petaPoco的引用
2.在app.config文件中加入 <connectionStrings> 节点, 并配置connectionString, providerName属性.
3.打开 DataBase.tt , 修改 ConnectionStringName,以及 Namespace , Namespace, 保存以后VS会自动执行模板文件,并生成实体类文件: DataBase.Cs
------------------------------------------------------------------------------
使用方法:
1.实例化:
- DataBase db = new Database(ConfigurationManager.ConnectionStrings["XE"]);
2.查询:
- var v = db.Fetch<cls>("")
3.增 / 改 / 删
- Cls.Insert();
- cls.Update();
- Cls.Delete();
支持事务以及多实体关联, 更详细的使用可以参考官网给出的Demo: http://www.toptensoftware.com/petapoco/
------------------------------------------------------------------------------
T4对Oracle支持并不好, 有比较多的Bug, 因此我把项目中遇到的Bug, 以及需要修改的地方:
1.T4实体类的Update方法 , 根据ModifiedColumns 是否为Null判断实体中是否被更新,需要修改 PetaPoco.Generator.ttinclude文件第114行, 改为 if (ModifiedColumns == null || ModifiedColumns.Count == 0) 进行判断.
2.模板所生成的所有类,主键是否为自增属性始终为true, 原因 PetaPoco.Core.ttinclude 中的OracleSchemaReader 类, LoadColumns方法中 col.IsAutoIncrement 始终为true, 改为:
col.IsAutoIncrement=col.PropertyType != "string";
3.Oracle 数据库数据类型字段允许为空, 但类型中没有自动加上"?"
修改PetaPoco.Core.ttinclude第1216行, 将"YES"改为"Y", col.IsNullable=rdr["IsNullable"].ToString()=="Y";
并在第179行, 增加 col.PropertyType !="DateTime" 判断.
其他Bug不再一一列出, 最后附上T4 模板的调试方法,方便大家遇到问题自己快速定位和优化 :
1. .ttinclude文件的第一行修改为 <#@ template language="C#" debug="true" hostspecific="True" #>
2. 在需要调试的代码片断附近加入: System.Diagnostics.Debugger.Launch();
petaPoco的更多相关文章
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 【原】Bootstrap+Knockout.JS+ASP.Net MVC3+PetaPOCO实现CRUD操作
1.需求: 1.1)页面要美观大气 1.2)前端代码要简洁清晰,要用MVC或是MVVM框架 1.3)服务端要用MVC框架,要Rest风格 1.4)数据访问要用ORM 2.效果: 2.1)列表 2.2) ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- PetaPoco利用ODP.NET Managed Driver连接Oracle
大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...
- 流行ORM产品优缺点分析--EntityFramework、NHibernate、PetaPoco
什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...
- Mini ORM——PetaPoco笔记
Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...
- miniprofiler的对数据库的监测使用。以nancy,petapoco为例
miniprofiler的使用 miniprofiler的详细介绍请看这里http://miniprofiler.com/.(可以对数据库和页面等监控如 ado ef mvc mongodb) 本文以 ...
- 关于PetaPoco的T4模板使用
PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM.PetaPoco介绍:http://www.cnblogs.com/youring2/archive/2012/06/ ...
- petapoco 使用 MiniProfiler Glimpse监控
PetaPoco是一款适用于.Net(window) 和Mono( linux )的微小.快速.单文件的微型ORM. MVC MiniProfiler是Stack Overflow团队设计的一款对AS ...
随机推荐
- 标准IO缓冲机制
参考资料: https://q16964777.iteye.com/blog/2228244 知道缓冲有几种模式:无缓冲.行缓冲.全缓冲.通过判断FILTE中的 _flags 的判断可以知道究竟是那种 ...
- docker下安装tensorflow
一,查找镜像 root@xushi:~# docker search tensorflow NAME DESCRIPTION STARS OFFICIAL AUTOMATED tensorflow/t ...
- DB2 OLAP函数的使用
说起 DB2 在线分析处理,可以用很好很强大来形容.这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现.首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看 ...
- 调用webservice时,产生android.os.NetworkOnMainThreadException错误
android.os.NetworkOnMainThreadException 网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序 ...
- navigator - 定时器 - event
1. navigator userAgent: 包含浏览器名称,内核,版本号的字符串 鄙视: 如何判断浏览器名称和版本号 2. 定时器: 2种: 1. 周期性定时器: 什么是: 让程序每隔一段时间间隔 ...
- IOS 在一个透明视图上添加不透明的子控件
环境: 在一个透明的view中添加一个tableview,tableview也变透明了. 解决: 不要这样设置view的透明度 view.backgroundColor = [UIColor clea ...
- python中下划线
引用:https://blog.csdn.net/tcx1992/article/details/80105645?from=timeline Python中下划线的5种含义 class A(obje ...
- ELK简单部署
系统环境: IP:192.168.0.156 ruby环境准备 yum -y install ruby-devel ruby-libs ruby-rdoc ruby-ri ruby-static ru ...
- dj forms表单组件
手动的一个个去校验前端传过来的字段数据,是很麻烦的,利用django 的forms组件,对需要校验的字段定义好,能够大大提高效率. 校验字段功能 from django.db import model ...
- c#用EPPLUS操作excel
参考: http://www.cnblogs.com/rumeng/p/3785748.html http://www.cnblogs.com/libla/p/5824296.html#3818995 ...