PetaPoco初体验(转)
大部分转自: http://landyer.com/archives/138
PetaPoco C#微型ORM框架,基本无需配置,仅由单个cs文件构成,支持.net3.5 .net4.0。
截稿时PetaPoco的官方最新版本为5.0.1。我不采用5.0.1版本,因为我用的是.net3.5,而5.0.1的版本中用到了一个类System.Tuple,这个类是从.net4.0才开始有的。(当然也可以自己实现这个类,不过像我这样的初学者还是算了吧)。
NuGet图形界面中默认列出的只有最新版本,一装就是5.0.1, 那就是使用NuGet命令行。
1.依次打开《工具》《库程序包管理器》《程序包管理器控制台》
2.敲入命令对可用的版本进行查询get-package –listavailable –allversion –filter petapoco,如图
3.敲入命令进行安装install-package petapoco –version 4.0.3
配置PetaPoco
现在又遇到一个问题,使用Ctrl+Shift+B编译项目的时候报错,说dynamic神马的不存在。
这是因为Dynamic也是.net4.0的。PetaPoco官方提供了一个编译时的选项来开启&关闭对dynamic的支持。
下面来进行编译选项的设置:
- 在项目上《右键》《属性》
- 选择左侧tab的第二项《生成》,在《条件编译符号》中输入PETAPOCO_NO_DYNAMIC
- 保存,再次Ctrl+Shift+B,进行编译。这次就OK了。
配置PetaPoco T4模板
打开
Database.tt文件
ConnectionStringName = "WorkDemo"; // Uses last connection string in config if not specified
Namespace = "WorkDemo.Tests.Models";
RepoName = "PPUtils"; //辅助类的名字
PetaPoco使用示例
一对多 和 多对一
为Account增加一个额外的属性AccountUsers
- 为Account_User增加一个额外的属性Account
- 将Account和Account_User进行关联

public partial class Account
{
[PetaPoco.Ignore]
public List<Account_User> AccountUsers { get; set; }
}
public partial class Account_User
{
[PetaPoco.Ignore]
public Account Account { get; set; }
} //
public class UserAccountRelator
{
private Dictionary<long, Account> accounts = new Dictionary<long, Account>(); public Account_User MapIt(Account account, Account_User user)
{
Account accountExisting;
if (accounts.TryGetValue(account.Id, out accountExisting))
{
account = accountExisting;
}
else
accounts.Add(account.Id, account); user.Account = account;
return user;
}
} //
public class AccountUserRelator
{
public Account current; public Account MapIt(Account account, Account_User user)
{
if (account == null)
return current; if (current != null && current.Id == account.Id)
{
current.AccountUsers.Add(user);
return null;
} var prev = current; current = account;
current.AccountUsers = new List<Account_User>();
current.AccountUsers.Add(user); return prev;
}
}

查询:

var users = db.Fetch<Account, Account_User, Account_User>(
new UserAccountRelator().MapIt,
"select * from Account A left join Account_User AU on AU.AccountId=A.Id "
);
foreach (Account_User user in users)
{
Console.WriteLine("{0} - {1}", user.Id, user.UserName);
} var accounts = db.Fetch<Account, Account_User, Account>(
new AccountUserRelator().MapIt,
"select * from Account A left join Account_User AU on AU.AccountId=A.Id "
);
foreach (Account acc in accounts)
{
Console.WriteLine("{0} - {1}", acc.Id, acc.Name);
}


PetaPoco初体验(转)的更多相关文章
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
随机推荐
- Entity Framework Code First (四)Fluent API - 配置属性/类型
上篇博文说过当我们定义的类不能遵循约定(Conventions)的时候,Code First 提供了两种方式来配置你的类:DataAnnotations 和 Fluent API, 本文将关注 Flu ...
- C#-WinForm-公共控件的基本属性及练习
视图→工具箱 基本操作:控件的取值.赋值.改值.事件 1.Button --按钮 AutoSize-指示该控件是否自动调整自身的大小以适应其内容的大小. 默认False,此时文字内容超过其宽度时自动 ...
- python安装失败0x80240017
安装KB2999226更新补丁后, 可以正常安装python3.5. 此更新包在vs2015的patch包里有.Microsoft下载中心也有,这里列出的适用于win7x86: Windows 7 更 ...
- 扩展easyUI tab控件,添加加载遮罩效果
项目里要用HighChart显示图表,如果返回的数量量太多,生成图表是一个很耗时的过程.tab控件又没有显示遮罩的设置(至少本菜是没有找到), Google了一下,根据另一个兄台写的方法,拿来改造了一 ...
- 【HDU 2063】过山车(二分图匹配)
n个女生,m个男生.如果女生i愿意让男生j作为parner,那就建边i->j+n,和j+n->i.然后用匈牙利算法算出最大匹配. 要注意N和M都要开2倍. #include <cst ...
- 【转】解决eclipse无法设置NDK问题
参考:http://jingyan.baidu.com/album/4d58d5413000a09dd4e9c0fe.html?picindex=1 到android sdk官网下载r23版本的ad ...
- python 学习笔记11(objgraph)
33. objgraph objgraph是Python的一个第三方包.安装之前需要安装xdot. 用途 安装 例子
- Ajax请求接口加密研究(针对网页前端的接口安全加密机制研究)
通常我们在h5前端调用后台接口时,一般是ajax,那么接口的安全成了一个问题. 这里可以肯定的说,前端调用的接口一定要验证! 然后剖析了微信网页版.京东网页版这些,也都是通过接口的形势绑定数据,所以在 ...
- ZendGuardLoader安装
遇到的问题 php -v Zend Guard Loader requires Zend Engine API version 220090626. The Zend Engine API versi ...
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
Apache服务器处理: ini_set('display_errors', 'Off');ini_set('memory_limit', -1); //-1 / 10240Mini_set(&quo ...