开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4816|回复: 1

[原创]分享一个优秀的开源ORM框架 ---- petaPoco

[复制链接]

0

精华

343

贡献

441

赞扬

帖子
301
软币
8606
在线时间
1708 小时
注册时间
2013-6-8
发表于 2013-6-23 21:17:38 | 显示全部楼层 |阅读模式
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.实例化:
C# code
?
1
DataBase db = new Database(ConfigurationManager.ConnectionStrings["XE"]);





2.查询:
C# code
?
1
var v = db.Fetch<cls>("")





3.增 / 改 / 删
C# code
?
1
2
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();

评分

参与人数 1赞扬 +1 收起 理由
热情沙漠 + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

343

贡献

441

赞扬

帖子
301
软币
8606
在线时间
1708 小时
注册时间
2013-6-8
 楼主| 发表于 2013-7-10 10:53:45 | 显示全部楼层
jdclang 发表于 2013-6-26 23:17
用过,感觉不顺手,devart不错

这是个ORM框架,不是数据库驱动噢
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-5-3 13:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表