(源码下载)高灵活度,高适用性,高性能,轻量级的 ORM 实现
我在上一篇博客中简单说明了一个面向内存数据集的“ORM”的实现方法,也提到我的设计实现或许不能称之为“ORM”,姑且称之为 S-ORM吧。
可能有些小伙伴没有理解我的思路和目的,与传统ORM框架做了简单比较,事实上我要做的事情并非为数据库表结构建立实体对象模型,而是希望使用传统的 ADO.NET 方式来操作数据库,并对 ADO.NET 所得到的结果数据集,进行松散的动态映射;同时提供一些类ORM的自动化方法,简化传统 ADO.NET 对数据库的操作。
再此再次简单说明设计目标:
1.支持所有数据库原生操作(ADO.NET / 基于微软企业库的数据模块)
2.解除与数据库表模型一一对应的关系,由开发人员灵活指定映射关系。
3.支持直接使用SQL语句并根据查询结果动态映射。
4.支持调用存储过程并根据查询结果动态映射。
5.支持自动化的事务处理,可自动回滚。
6.支持一对多的映射关系,即一个实体类可以映射到多张表。
7.支持自动填充/补全数据实体类中的数据。
8.高性能,高灵活性,高可维护性。
详细说明可参考我的上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html
在此补充几个应用场景的小例子:
1. 表 User 中有若干字段(>2),现在只想取出其中 2 个字段建立对象实例并序列化发送至客户端。
定义一个包含所需 2 个字段的对象(假设为 User_A ),通过 S-ORM 提供的 Attribute 指定该对象与数据库表结构的对应关系,使用 Fill 方法自动填充该对象的属性。
[Table("User")]
public class User_A
{
[Key]
public Guid Id
{
get;
set;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
填充该对象:
public User_A GetUser_A(Guid id)
{
User_A user = new User_A();
user.Id = id;
if (_dataBase.Fill<User_A>(user))
return user;
else
return null;
}
2. 希望使用 SQL 语句从数据库表中查询数据,将结果实例化为强类型对象实例。
在此场景中,结果集可能来自于多张表,或者结果集根本就是某些数据的复杂统计结果。与表结构的设计完全无关,使用 S-ORM 非常简单,同上先定义好对象类型,然后使用类似如下方法:
public List<User_A> GetData(Guid id)
{
List<CommandParameter> parameterList = new List<CommandParameter>();
parameterList.Add(new CommandParameter("@userId", id));
List<User_A> userList = _dataBase.Select<User_A>(
"SELECT * FROM [User] INNER JOIN [Product] ON [User].[Id] = [Product].[UserId] WHERE [User].[Id]= @userId", parameterList);
return userList;
}
在此可以看到, S-ORM 所做的事情非常简单,对 ADO.NET 返回的数据集,与指定的对象类型 User_A ,进行动态映射,得到 User_A 类型的实例集合。
注意:S-ORM 不强制要求对象类型定义与内存数据集字段一一对应,在上一博客中已有详细说明,请参考。
3. 调用存储过程,得到强类型对象集合结果。
同上例目的基本一致,对于复杂查询,直接使用数据库所提供的强大查询功能:视图,存储过程,自定义函数,将得到的结果集自动化映射为强类型对象实例。
先定义我们想要的对象类型,不再赘述,然后借助 S-ORM:
public List<Record> GetReport(Guid id)
{
List<CommandParameter> parameterList = new List<CommandParameter>();
parameterList.Add(new CommandParameter("@id", id));
DataSet dataSet = _dataBase.ExecuteDataSet(
CommandType.StoredProcedure, "GetRecord", parameterList, "Result");
List<Record> reportList = RelationalMappingUnity.Select<Record>(dataSet);
return reportList;
}
上面 3 个示例基本代表了 S-ORM 的设计目的,同时 S-ORM 也提供了许多相关的辅助功能,和与传统 ORM 类似的增删改查方法,请参考上一篇博客中的详细介绍。
可参考我的上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html
欢迎加我QQ交流探讨,共同学习:279060597,另外我在南京,有南京的朋友吗?
(源码下载)高灵活度,高适用性,高性能,轻量级的 ORM 实现的更多相关文章
- VopSdk一个高逼格微信公众号开发SDK(源码下载)
看之前回复很多说明大家很有热情&文章被误删掉了,不想让有的朋友错失这个高逼格的东西,现在重新发布,这次就直接放出源码,文章最末下载地址. 看之前回复很多说明大家很有热情&文章被误删掉了 ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- 《编写高质量代码:改善C#程序的157个建议》源码下载
==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...
- 高仿精仿微信应用ios源码下载
微信,超过3亿人使用,能够通过手机网络给好友发送语音.文字消息.表情.图片和视频,还可以分享照片到朋友圈.通过摇一摇.查看附近的人,你可以认识新的朋友.使用扫一扫,你可以扫描二维码.条码.图书和街景. ...
- 《大话设计模式》C#/C++版pdf/源码下载
大话设计模式(带目录完整版)[中文PDF+源代码].zip 下载地址:http://pan.baidu.com/s/1giQP4大话设计模式C++.pdf下载地址:http://pan.baidu.c ...
- 【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms
很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...
- yate: windows下源码下载,配置,编译
源码下载:使用svn下载checkout:http://voip.null.ro/svn/yate/trunk 配置:(本人使用的是vs2008,故下载的qt工具都是对应2008) 1. 下载并安装q ...
- Android斗地主棋牌游戏牌桌实现源码下载
本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...
- 让你心动的 HTML5 & CSS3 效果【附源码下载】
这里集合的这组 HTML5 & CSS3 效果,有的是网站开发中常用的.实用的功能,有的是先进的 Web 技术的应用演示.不管哪一种,这些案例中的技术都值得我们去探究和学习. 超炫的 HTML ...
- 分享一组很赞的 jQuery 特效【附源码下载】
作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些 ...
随机推荐
- C#运算符号
double x=5.1e3;// 5.1乘以10 的3次方. x就是 5100 //注 : 5.1e+3=5.1e3=5.1e03=5.1e+03 double y=5.1e-3;// 5.1乘以 ...
- JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台
近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对 ...
- 更换项目jdk版本
现在开发用的都是1.7版本,但是以前老的服务器上可能是1.6jdk,这时候就需要我们将项目重新用1.6编译; 修改三个文件(三个地方)即可; 第一步,右键单击项目,选择properties,修改1:J ...
- 虚拟机主机能互相ping通,但是无法远程连接
首先将虚拟机关机,找到Edit virtual machine Settings(编辑虚拟机设置)
- VS 编辑器扩展辅助工具
[工具]——[扩展和更新]——[联机]输入 C# outline 2015
- 寒冬之下,浩瀚智能开单收银打印扫描POS为何能在批发零售门店商场 车销行业 风靡!:进销存+打印扫描POS机
是一款适用于商超.餐饮.服装鞋帽.家电专营等等具有零售行业特点的企业,供企业管理人员用于管理.监控本品牌的市场占有率.门店覆盖区域.网点分布合理性等经济地理信息的工具平台. 1,功能一:业务抄单文章来 ...
- Redis为什么使用单进程单线程方式也这么快
[转] http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.htm ...
- < meta > 元素
< meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...
- HTML5之文件API
问题很简单,做个上传文件的页面. <!-- multiple代表可上传多个文件 --> <input type="file" id="file" ...
- jQuery缓存数据
很多同学在项目中都喜欢将数据存储在HTMLElement属性上,如 1 2 3 4 <div data="some data">Test</div> < ...