我在上一篇博客中简单说明了一个面向内存数据集的“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 实现的更多相关文章

  1. VopSdk一个高逼格微信公众号开发SDK(源码下载)

    看之前回复很多说明大家很有热情&文章被误删掉了,不想让有的朋友错失这个高逼格的东西,现在重新发布,这次就直接放出源码,文章最末下载地址. 看之前回复很多说明大家很有热情&文章被误删掉了 ...

  2. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  3. 《编写高质量代码:改善C#程序的157个建议》源码下载

    ==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...

  4. 高仿精仿微信应用ios源码下载

    微信,超过3亿人使用,能够通过手机网络给好友发送语音.文字消息.表情.图片和视频,还可以分享照片到朋友圈.通过摇一摇.查看附近的人,你可以认识新的朋友.使用扫一扫,你可以扫描二维码.条码.图书和街景. ...

  5. 《大话设计模式》C#/C++版pdf/源码下载

    大话设计模式(带目录完整版)[中文PDF+源代码].zip 下载地址:http://pan.baidu.com/s/1giQP4大话设计模式C++.pdf下载地址:http://pan.baidu.c ...

  6. 【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms

    很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...

  7. yate: windows下源码下载,配置,编译

    源码下载:使用svn下载checkout:http://voip.null.ro/svn/yate/trunk 配置:(本人使用的是vs2008,故下载的qt工具都是对应2008) 1. 下载并安装q ...

  8. Android斗地主棋牌游戏牌桌实现源码下载

    本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...

  9. 让你心动的 HTML5 & CSS3 效果【附源码下载】

    这里集合的这组 HTML5 & CSS3 效果,有的是网站开发中常用的.实用的功能,有的是先进的 Web 技术的应用演示.不管哪一种,这些案例中的技术都值得我们去探究和学习. 超炫的 HTML ...

  10. 分享一组很赞的 jQuery 特效【附源码下载】

    作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些  ...

随机推荐

  1. Flume(3)source组件之NetcatSource使用介绍

    一.概述: 本节首先提供一个基于netcat的source+channel(memory)+sink(logger)的数据传输过程.然后剖析一下NetcatSource中的代码执行逻辑. 二.flum ...

  2. 前端项目通用、常用js common.js

    var url = location.href; if (url.toLowerCase().indexOf("/akweb_admin/") == -1) { function ...

  3. HTML导航栏

    先看效果(两种,1:自己写样式,写交互,2.用jQueryUI 的menu),如下图 第一种:       第二种:   第一种样式: 然后就开始准备了,单村用js和css也可以写出来,不过既然有jq ...

  4. TOP 和 OFFSET 筛选(转)

    SQL Server 对行数的排序提供了 TOP 筛选.SQL Server 2012 新增了 OFFSET 筛选. 一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回 ...

  5. Linux学习笔记(7)-进程

    明天开始学习进程,在以前的单片机开发中,都没有进程这个概念,但从网上了解到,这个东西在操作系统中似乎具有很重要的地位,一定好好学习! --------------------------------- ...

  6. Codeforces Round #366 (Div. 2)

    CF 复仇者联盟场... 水题 A - Hulk(绿巨人) 输出love hate... #include <bits/stdc++.h> typedef long long ll; co ...

  7. Arduino下LCD1602综合探究(下)——如何减少1602的连线,LiquidCrystal库,LiquidCrystal库中bug的解决方法

    一.前言: 上文中,笔者系统的阐述了1602的两种驱动方式,并简单的提到了Arduino的LiquidCrystal库.本文紧接上文,对以下两个问题进行更加深入的探讨:如何能够使1602对Arduin ...

  8. css自定义三角形效果

    废话不说了,直接上代码 element{ width:0px; height:0px; border-left:10px; border-right:10px; border-bottom:10px; ...

  9. HTML5 学习笔记(一)——HTML5概要与新增标签

    目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2 ...

  10. 深入探索RB-tree数据结构

    引子 部门在各个团队推广软件通用技能矩阵工具,希望通过度量找到能力薄弱点,引导团队进行改进.从我们团队的数据上看,团队在数据结构和算法上的短板明显,需要加强,这也是写这篇文章的背后的初衷. 数据结构和 ...