Dappers : 基于Dapper.net 扩展的Dao
2011-09-28 08:52
357 查看
某天在园里看到Dapper.net , 终于发现找到我一致梦寐的 OM (Object Mapping) (某人,你知道的....).
从Java到.Net , 从spring.net 0.6 到 spring.net 1.3.2 , 一直在使用Hibernate, 但这个 ORM - Relation 处理却一直被我唾弃.
如今终于如愿以偿, 立即开始对它进行简单的封装.
功能扩展:
1.ValueType类型隐式转换, 如某一个numeric 在Oracle中是Int64,但Sql Server中确是 decimal, 需要在DynamicMethod中加入隐式转换.
2.Clob大字段支持. 靠Dapper的 XML类型是不行的.
3.参数,结果集 弱类型转换,如 IDictionary 作为请求参数 或DTO
4.增加非泛型接口查询
5.存储过程返回结果集时,处理输出参数 (Oracle Cursor处理及output参数读取)
6.简单sql,自动组装分页语句处理 (top order,rownum, skip/take)
7.根据DbProvider自动替换参数prefix
8. 实现SQL,SP调用完全透明兼容Oracle/SQL Server
9. 对象转SQL CRUD语句,以及 partial update 语句自动生成.
10. 支持OSIV模式的Connection以及Transaction管理 (模仿Spring.Net SessionScope)
-----------
//Delete a user
MyUser u = new MyUser() { Id = "testId" };
dao.Execute(QueryInfo.GetSQLUpdate(typeof(MyUser)),u);
1 // SP返回2个结果集10行 Users,Offices,同时返回两表总函数
2 QueryInfo info = new QueryInfo();
3 info.NamedQuery = "TEST_DAPPER_USERS";
4 info.AddParam("UserCode", "y%");
5 info.AddParam("out_TotalCount", 1);
6 info.AddParam("out_TotalCount2", 1);
7 info.AddParam("out_cursor1", "CURSOR");
8 info.AddParam("out_cursor2", "CURSOR");
9
10 var reader = dao.QueryMultiple(info);
11
12 var user = reader.Read<MyUser>();
13 var office = reader.Read<MyOffice>();
14
15 object i = reader.OutputParams["out_TotalCount"];
16 object j = reader.OutputParams["out_TotalCount2"];
IDictionary<string, object> param = new Dictionary<string, object>();
param.Add("UserCode_RLK", "chen");//==> and UserCode like :UserCode /'chen%'
param.Add("CreatedOn_GEQ", "2011-09-01");//==> and CreatedOn >=:CreatedOn
param.Add("IsActive", 1);//==> and IsActive=:IsActive
QueryInfo info = new QueryInfo("SYS_USER u");
info.OrderBy.Add("Name");
info.AddParam(param);
info.TotalCount = 1;//分页请求
info.PageSize = 15;
info.StartRecord = 10;
info.MappingType=typeof(MyUser);
info = dao.Query(info);
//info.List=IList[10] Results of(MyUser)
//info.TotalCount= counts of the table
------------
Dapper实现非常不错,但结合我的应用场景有些缺陷, 而且静态方法实现导致扩展代码难免侵入,
可能造成后期Dapper同步升级一些隐患. 目前靠10个 NUnit用例保障.
有兴趣用Dapper的朋友,对扩展,应用有什么疑问我乐于帮忙~~
从Java到.Net , 从spring.net 0.6 到 spring.net 1.3.2 , 一直在使用Hibernate, 但这个 ORM - Relation 处理却一直被我唾弃.
如今终于如愿以偿, 立即开始对它进行简单的封装.
功能扩展:
1.ValueType类型隐式转换, 如某一个numeric 在Oracle中是Int64,但Sql Server中确是 decimal, 需要在DynamicMethod中加入隐式转换.
2.Clob大字段支持. 靠Dapper的 XML类型是不行的.
3.参数,结果集 弱类型转换,如 IDictionary 作为请求参数 或DTO
4.增加非泛型接口查询
5.存储过程返回结果集时,处理输出参数 (Oracle Cursor处理及output参数读取)
6.简单sql,自动组装分页语句处理 (top order,rownum, skip/take)
7.根据DbProvider自动替换参数prefix
8. 实现SQL,SP调用完全透明兼容Oracle/SQL Server
9. 对象转SQL CRUD语句,以及 partial update 语句自动生成.
10. 支持OSIV模式的Connection以及Transaction管理 (模仿Spring.Net SessionScope)
-----------
//Delete a user
MyUser u = new MyUser() { Id = "testId" };
dao.Execute(QueryInfo.GetSQLUpdate(typeof(MyUser)),u);
1 // SP返回2个结果集10行 Users,Offices,同时返回两表总函数
2 QueryInfo info = new QueryInfo();
3 info.NamedQuery = "TEST_DAPPER_USERS";
4 info.AddParam("UserCode", "y%");
5 info.AddParam("out_TotalCount", 1);
6 info.AddParam("out_TotalCount2", 1);
7 info.AddParam("out_cursor1", "CURSOR");
8 info.AddParam("out_cursor2", "CURSOR");
9
10 var reader = dao.QueryMultiple(info);
11
12 var user = reader.Read<MyUser>();
13 var office = reader.Read<MyOffice>();
14
15 object i = reader.OutputParams["out_TotalCount"];
16 object j = reader.OutputParams["out_TotalCount2"];
IDictionary<string, object> param = new Dictionary<string, object>();
param.Add("UserCode_RLK", "chen");//==> and UserCode like :UserCode /'chen%'
param.Add("CreatedOn_GEQ", "2011-09-01");//==> and CreatedOn >=:CreatedOn
param.Add("IsActive", 1);//==> and IsActive=:IsActive
QueryInfo info = new QueryInfo("SYS_USER u");
info.OrderBy.Add("Name");
info.AddParam(param);
info.TotalCount = 1;//分页请求
info.PageSize = 15;
info.StartRecord = 10;
info.MappingType=typeof(MyUser);
info = dao.Query(info);
//info.List=IList[10] Results of(MyUser)
//info.TotalCount= counts of the table
------------
Dapper实现非常不错,但结合我的应用场景有些缺陷, 而且静态方法实现导致扩展代码难免侵入,
可能造成后期Dapper同步升级一些隐患. 目前靠10个 NUnit用例保障.
有兴趣用Dapper的朋友,对扩展,应用有什么疑问我乐于帮忙~~
相关文章推荐
- Dappers : 基于Dapper.net 扩展的Dao - Part II
- SharePoint And Ajax Technology(4):基于Microsoft ASP.NET AJAX 3.5的扩展
- SharePoint And Ajax Technology(4):基于Microsoft ASP.NET AJAX 3.5的扩展
- SharePoint And Ajax Technology(4):基于Microsoft ASP.NET AJAX 3.5的扩展
- SharePoint And Ajax Technology(4):基于Microsoft ASP.NET AJAX 3.5的扩展2
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 插件接口IModule扩展
- Dapper.net 在Parameterized时对于String的扩展(转)
- .net core 基于 dapper 扩展的操作 mysql
- dapper-dot-net用法及其扩展系列
- Dapper.net 在Parameterized时对于String的扩展
- Linux下基于net-snmp的Agent扩展开发
- Asp.net MVC 基于规则的权限设计(续)-- 扩展微软企业库安全模块
- Asp.net MVC 基于规则的权限设计(续)-- 扩展微软企业库安全模块
- Asp.Net Ajax 学习笔记12 基于Microsoft AJAX Library扩展客户端组件
- 基于SuperMap iObjects.NET 7C 中扩展图层实现航线一键查询系统
- 基于ASP.NET 3.5 Web Service 的JSON扩展应用
- 基于ASP.NET 3.5 Web Service 的JSON扩展应用 推荐
- Yale CAS + .net Client 实现 SSO(5)--扩展基于数据库的身份验证
- .net下开源轻量级ORM框架Dapper扩展系列4(重构与优化)
- 基于jQuery的GridView-Flexigrid(2)-扩展和修复