[转载]ORM-PetaPoco 小型ORM框架
轻量级ORM-PetaPoco及改进
PetaPoco描述
PetaPoco是一个微小的,快速的,单个文件的微型ORM,可以运行在.NET和Mono平台上。相对于NHibernate与Entity Framework,PetaPoco有以下几点非常吸引我:
- 1. 轻量级,高性能;
- 2. 可同时运行在.net与mono平台上;
- 3. 支持多种数据库,且按其提供的规范编写组装SQL,切换数据库时,基本上不需要修改代码;
- 4. SqlBuilder高效快捷方便;
- PetaPoco地址:http://www.toptensoftware.com/petapoco/
- 如何使用PetaPoco,PetaPoco有非常详细的使用指南,园子里面也有同学翻译了:传送门
- 下面,主要分享一下我对它的一些小改造
PetaPocoRepository 仓储基类
- PetaPocoRepository主要通过一个泛型仓储基类来封装PetaPoco的大多数数据操作。简化业务对象仓储操作类的开发。
- 主要有以下操作:
Add,Delete,Update,Save,FirstOrDefault(获取一条),Query(获取列表),PagedList(获取分页)等。
- 代码片段:

- 在相对较为复杂的业务系统中,可能存在多个数据库,例如:UserDB,ProductDB,OrderDB等。且存在UserDB数据量较大,需要上Oracle数据库,而其他数据库有可能是SqlServer或MySql;
- 即一个业务系统中,存在多个数据库,多种数据库。
- 面对这样的业务系统时,我们需要对数据层进行较好地封装,而PetaPoco的Sql Builder无缝兼容多种数据库能很好地解决异构数据库的问题。因此,我们只需要解决多个数据库带来的编码困难。
SingleRepository 单个数据库模式的仓储基类
系统中存在多个数据库时,如果我们使用SqlHelper类似的组件来进行编码时,可能不是很优雅,类似于: 
其实,我们可以通过封装一个基类,通过某个特性来说明此业务对象仓储操作类对应的是哪个数据库。它有以下需求:
1. 最好能继承PetaPocoRepository,得到其所有通用性的数据操作方法;
2. 特性来描述该对象操作的是哪个数据库;
OK,直接上图:
SingleDbFactory
SingleRepository<T>
使用
示例环境:
1. 存在2个数据库:TestDB(SqlServer),Test(MySql);
2. TestDB(SqlServer)中存在2个表UserInfo,ProductId,Test(MySql)中存在表UserInfo
3. 数据库连接字符串
<add name=”SqlServerDB” connectionString=”Server=.\SqlExpress;Database=TestDB;Integrated Security=SSPI;” providerName=”System.Data.SqlClient“/> <add name=”MySqlDB” connectionString=”Server=127.0.0.1;Database=Test;Uid=root;Pwd=123456;” providerName=”MySql.Data.MySqlClient“/>
4. 仓储类 

5. 类图

通过SingleDbFactory特性的描述,即可较为优雅地实现数据操作类对应不同数据库。
MySql / SqlServer 多种数据库的支持
上面的示例中,TestDB(SqlServer)及Test(MySql)中都存在表UserInfo。当我们从SqlServer切换至MySql时,只需要UserInfoRepository中的SQL语句使用SqlBuilder类来进行规范的组装,完全可以无缝兼容。(只需要修改SingleDbFactory即可,在本文最后会附上示例代码。)

需要探讨的问题
1. 当某个业务对象在一个数据库内进行表水平拆分时,组件需要如何应对。这个想了很久,最开始,我也想通过一个SingleSharddingRepository来实现。碰到了一些困难,如:
Shardding时的规则多样化,怎样通过代码注入的方式来定义规则;
大量使用反射或AOP时,性能会不会有影响;
2. 当某个业务对象进行数据库级别的水平拆分时,组件需要如何应对。
非常希望园子里的高手给出较好的建议
DEMO下载地址:http://files.cnblogs.com/bagegejin/PetaPocoDemo.rar
原创文章,转载请注明: 转载自帮助您
本文链接地址: 轻量级ORM-PetaPoco及改进
[转载]ORM-PetaPoco 小型ORM框架的更多相关文章
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
- Mini ORM——PetaPoco笔记
Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...
- Dapper小型ORM的使用(随便吐槽下公司)
近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...
- 轻量级ORM——PetaPoco
近乎产品的数据访问是基于轻量级ORM——PetaPoco,哪怕是最新的5.2版本也是基于PetaPoco. 产品源码下载地址:http://www.jinhusns.com/Products/Down ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Update篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Delete篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Query篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
随机推荐
- lua语法介绍(二)
一.语法简要 在学习任何语法之前,我们都需要知道该门语言是怎样定义的,是怎样运行的,话说白了,就是到了人家的山头得唱人家山头的歌.下面介绍lua的语法 1.变量的定义 特点: 1.变量在使用前必须声明 ...
- PowerShell使用Clear-Content命令删除、清空文件内容的例子
本文介绍PowerShell中如何将文件的内容进行删除或清空,使用VBScript要先创建FSO,然后再打开文件,再修改文件:PowerShell清空文件只要一句Clear-Content. 所谓清空 ...
- DP_Milking Time
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...
- 基本mysql语句
一 select语句 基本语法 select 列名1,列名2 //可以使用完全限定的列名 tables.列名 form tables 过滤(where ) 分组(group ...
- 第九章 MIZ702 ZYNQ片上ADC的使用
9.0难度系数★☆☆☆☆☆☆ 9.1实验概述 这次借助zynq的内嵌的XADC来采集zynq内部的一些参数: •VCCINT:内部PL核心电压 •VCCAUX:辅助PL电压 •VREFP:XADC ...
- 【思维】Kenken Race
题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...
- 1-MySQL DBA笔记-理解MySQL
第一部分 入门篇 本篇首先介绍MySQL的应用领域.基础架构和版本,然后介绍MySQL的基础知识,如查询的执行过程.权限机制.连接.存储引擎,最后阐述一些基础概念. 第1章 理解MySQL 本章将介绍 ...
- WindowsAPI使用详解——GetVersion|GetVersionEx 获取操作系统版本和名称
Windows API 中有两个函数可以得到系统版本信息:GetVersion和GetVersionEx. GetVersion这个函数曾经困扰了很多程序员,其本来设计的是在DWORD返 ...
- Django2.0 应用 Xadmin 报错解决(转载)
原文地址:https://blog.csdn.net/GoAheadNeverTurnBack/article/details/8143362 1.TypeError at /xadmin/ l ...
- IOI2020只因训队作业胡做
w a r n i n g ! 意 识 流 警 告 !!1 不想一个个发了,干脆直接发个合集得了qwq 感觉这辈子都做不完了\(Q\omega Q\) CF516D 写过题解了 CF505E 写过题解 ...