(源码下载)高灵活度,高适用性,高性能,轻量级的 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://121.40.198.87:8010/S-ORM.zip

小广告

博主正在留意南京的相关高级职位

江苏电信10000号前技术经理,现任某外资企业Team Leader

简历:http://121.40.198.87:8010/

使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序:

http://www.cnblogs.com/sheng_chao/p/4387249.html

使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一):

http://www.cnblogs.com/sheng_chao/p/4548146.html

时间: 2024-07-28 13:07:52

(源码下载)高灵活度,高适用性,高性能,轻量级的 ORM 实现的相关文章

分享一个源码下载网站,高仿京东商城源码下载

仿照京东商城做出的APP(仅实现了部分界面),自己开发着玩的,需要的拿去 京东商城,小试牛刀之作,与广大开发者分享,需要的拿去 http://www.devstore.cn/code/info/87.html 登陆界面 新品特惠疯狂抢购页面 京东商城项目相关服务--支付平台的选择,市场上的支付平台有支付宝,银联,机锋支付,360开放平台,有米,豌豆荚,中国移动应用,微信,微派,百度钱包等等,在如此多的支付平台里面你的项目该集合哪几个支付平台呢,推荐你关注参考相关资料DevStore这个平台,有关

如何才能拍摄出高清无码?(附源码下载!)

要想拍摄出高清无码,摄像头很关键. 摄像头有两个重要的参数,一个是分辨率,一个是帧频. 附:设备测试demo源码下载 一.笔记本的自带摄像头的参数 Size就是摄像头的分辨率,MaxFrameRate是指摄像头采集能达到的最大帧频. 当然,我这个摄像头比较low,录制高清无码肯定是不行的. 二.外接摄像头测出来的参数. 附:设备测试demo源码下载 三.选定摄像头的分辨率和帧频来录制视频 现在选定的是1280*720,帧频为30fps. 录制得到的视频的参数信息如下: 附:视频录制demo源码下

关于怎么做大发彩票源码下载高质量的代码,给你提供一些解决方案

写出大发彩票源码下载论坛:haozbbs.com Q1446595067高质量代码,并不是搭建空中楼阁,需要有一定的基础:这里我重点强调与代码质量密切相关的几点: 掌握好开发语言,比如做Android就必须对Java足够熟悉,<Effective Java>一书就是教授大家如何更好得掌握Java, 写出高质量Java代码. 熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,

腾讯云分布式牛 彩源码下载高可靠消息队列 CMQ 架构

牛彩源码下载联系方式:QQ:2747044651 网页在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值.广告订单等都有广泛使用.目前已上线腾讯云对外开放,本文对腾讯云CMQ 核心技术原理进行分享介绍. CMQ消息队列主要适用于金融.交易.订单等对可靠性.可用性有较高要求的业务场景. 以腾讯充值系统为例,该充值系统通过CMQ 对交易模块.发货部分.

微信PK10源码下载与Redis_NOSQL简介

一.NoSQL入门与概述1.互联网背景下为什么要用NoSQL? 1)单机mysql年代在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多.微信PK10源码下载QQ:2152876294 网址diguaym.com 上述架构下,我们来看看数据存储的瓶颈是什么? 数据量的总大小 一个机器放不下时数据的索引(B+ Tree)一个机器的内存放不下时访问量(读写混合)一个实例不能承受如果满足了上述1 or 3个,进化...... 2

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

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

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

Android中Loader及LoaderManager的使用(附源码下载)

managedQuery方法的缺陷 Loader是用来更好地加载数据的,在我们谈论Loader之前,我们先研究一下Activity的managedQuery方法,该方法也是用于在Activity中加载数据的.在Android 3.0之前的版本中,我们如果想在Activity中通过ContentResolver对ContentProvider进行查询,我们可以方便的调用Activity的managedQuery方法,该方法的源码如下: @Deprecated public final Cursor

【史上最全】微信朋友圈游戏源码下载

源码介绍:  所有源码都是html5开发,可以跨平台,无论谷歌安卓还是苹果ios都可以流畅运行,游戏可以根据自己的情况添加链接,可以分享到微信圈后跳转的你的游戏平台页.个别游戏可以设置指定次数提示添加微信账号回复指定内容获得答案.保证游戏可运行性,不像某些不良卖家价格很高买来的根本没几个能用或者很多凑数游戏. 一个简单的营利模式: 通过手机作为入口,分享某某游戏的得分到朋友圈,朋友圈内的病毒式传播速度超过你想象.然后你可以自己加入关注微信代码.百度移动广告代码.淘客代码.等等吧,可以发挥的空间非

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,