.NET框架下ORM的一个轻量高效替代方案

从最初做JAVA开发到现在致力于.NET平台,经手的大大小小的项目也不在少数。刚开始每写成一个程序还能获得不少的成就感,但随着开发年限的增加、项目代码行的增加,写代码更多时候变成一种糊口的工具而非兴趣时,越来越被大量相似的SQL搅得头晕脑胀,尤其维护旧程序时,对SQL的调试更是让人头大。于是,一直致力于找出一个方法,可以不用每次都去编写那些烦人的SQL。

答案是肯定的,JAVA平台下有个Hibernate的ORM框架,它应该是最早的一个成熟的ORM软件,貌似可以解决我的问题。迫不及待的下载、使用MyEclipse去写测试程序,却发现并不如想象中的好,对我来说,最大的障碍在于那个XML配置文件。借助于IDE,配置工作或许还不是太繁琐,但脱离IDE之后,我发现对这个配置文件维护的困难绝对不在直接维护SQL命令之下。当然,好处还是有的,比如不用去调试每一条SQL。

虽然不太情愿,但毕竟脱离IDE的情况还是很少,所以也就“爱用不用”地用了一段时间。

之后,机缘巧合的转向.NET平台,从.NET Framework 1.1和VS2003开始,到现在的.NET Framework 2.0和VS2005,随着在.NET平台开发经验的日渐丰富,对C#特性越来越全面的了解,终于决定要自己写一个更加符合C#口味的ORM框架,完全的面向对象,更加简洁,更加高效,对IDE的智能感知支持更好(早期绑定) 。

一起来看看它的工作方式。

假设有一个员工表,字段为 id,employee_id,name,department_id

有一个实体类EmployeeInfo与上表各字段对应

现在我们需要为这个表写一个访问类,提供对数据库的增、删、改、查工作。

下面是实现以上功能的所有代码:

public class EmployeeTable : TableAccess<EmployeeInfo> {
         internal override ColumnParameter[] FillColumnParameters(EmployeeInfo entity) {
             return base.BuildColumnParameter(
                 entity.ID,
                 entity.EmployeeID,
                 entity.Name,
                 entity.DepartmentID
             );
         }
         public override string TableName {
             get { return "employee_table"; }
         }
         public override TableColumnCollection TableColumns {
             get {
                 TableColumnCollection list = new TableColumnCollection(4);
                 list.AddRange(new TableColumn[] {
                     new TableColumn("id", true), // 自增只读字段
                     new TableColumn("employee_id"),
                     new TableColumn("name"),
                     new TableColumn("department_id")
                 });
                 return list;
             }
         }
         internal override EmployeeInfo BuildEntity(MySqlDataReader reader, int startIndex) {
             EmployeeInfo info = new EmployeeInfo();
             info.ID = reader.GetInt32(0);
             info.EmployeeID = reader.GetString(1);
             info.Name = reader.GetString(2);
             info.DepartmentID = DataReadyUtility.GetInt32(reader,3);
             return info;
         }

}

时间: 2024-10-19 22:42:16

.NET框架下ORM的一个轻量高效替代方案的相关文章

31款轻量高效的开源 JavaScript 插件和库

31款轻量高效的开源 JavaScript 插件和库 目前有很多网站设计师和开发者喜欢使用由JavaScript开发的插件和库,但同时面临一个苦恼的问题:它们中的大多数实在是太累赘而且常常降低网站的性能.其实,其中也有不少轻量级的插件和库,它们不仅轻巧有用,而且不会影响网站的性能.本文,就为大家整理了以来30多款轻量级Javascript插件和库的列表,这些工具服务于特定的目标,并且它们能够非常有效和高效地实现目标. 不管你想创建一个图片库.一个滑动效果,个性化菜单还是其他接口元素,你都可以用这

阿里云轻量应用服务器使用体验

阿里云最近推出了一款叫做轻量应用服务器的产品.官网宣传的可以30秒一键启动应用:域名解析.网站发布.服务器管理等操作结合一体:包含应用管理,分析功能:镜像包括企业官网.个人博客.商城系统.论坛社区.知识库系统等主流网站框架,可以说功能确实很全面.整体看来,这其实就是一个面向新手和大众的网站建设应用,轻量应用云服务器最大的特点就是易用,易上手. 刚刚入手了一台最低配的,接下来就带大家体验下阿里云的轻量应用服务器到底怎么样,适不适合大部分的新手朋友们. 购买的话比较简单,有4个配置入门版.基础版.通

3种方法来创建轻量、持久化的Xubuntu Linux USB系统盘

3种方法来创建轻量.持久化的Xubuntu Linux USB系统盘 使用Universal USB Install创建持久化USB Xubuntu系统盘 这个教程为你介绍如何使用Xubuntu Linux创建一个轻量并且持久化的Linux USB系统盘. 译者注:持久化Linux USB系统盘(Persistent Linux USB drive),安装在优盘的Linux系统,允许用户保存数据到优盘而不是仅仅将这些修改留在内存中.这些数据可以在重启后恢复并且重新使用,甚至是在其他的机器上面启动

利用常用的集成开发环境(IDE)和中间件设计轻量型ESB

本文介绍了实现一个自产的轻量型http://www.aliyun.com/zixun/aggregation/7921.html">企业服务总线 (ESB) 的设计蓝图,该企业服务总线利用了常用的集成开发环境 (IDE) 和中间件.本文中的场景使用了 IBM® WebSphere® Application Server V8(一个用于 Java EE 应用程序的强健的部署环境)和 IBM Rational® Software Architect(提供了工具来设计.开发.测试和打包要部署到应

Android中给fragment写入参数的轻量开发包FragmentArgs简介_Android

Android开发有时候会令人头痛.你不得不为诸如建立fragment这样简单的事情写很多代码.幸运的是java支持一个强大的工具:注释处理器(Annotation Processors). Fragment的问题是你不得不设置很多参数,从而让它正常运行.很多android开发新手通常这样写: 复制代码 代码如下: public class MyFragment extends Fragment { private int id; private String title; public sta

Android中给fragment写入参数的轻量开发包FragmentArgs简介

Android开发有时候会令人头痛.你不得不为诸如建立fragment这样简单的事情写很多代码.幸运的是java支持一个强大的工具:注释处理器(Annotation Processors). Fragment的问题是你不得不设置很多参数,从而让它正常运行.很多android开发新手通常这样写: 复制代码 代码如下: public class MyFragment extends Fragment { private int id; private String title; public sta

asp.net c# 轻量ORM框架开发之反射与动态编译

对象关系映射,靠纯手打,是个超级繁琐又类的苦力活,即便它能给你再高的运行效率,但是也会损失开发效率. c#在netframework中其实已经提供了ORM框架了,叫做entity framework,这个框架其实已经做的蛮好的了,但是框架实在是太重,重到写出来的代码在配置不那么好的电脑上跑起来都卡顿. 因此我们决定自己写这么一个框架,一来重在轻量:二来,就是想探探路,看看ORM框架到底是怎么做出来的. 当然,让我自己凭空造楼是做不到的,但是我们可以借鉴,尤其是在互联网这么发达的时代,去githu

DataRabbit 轻量的ORM框架(17)-- 使用DataRabbit的最佳实践

     在DataRabbit 轻量的数据访问框架(12)-- 将DataRabbit融入架构 一文中介绍了如何将DataRabbit与三层架构结合起来,但是,在实际的项目中,每一层是如何使用DataRabbit的了?本文将展示作者在项目中使用DataRabbit的标准做法.      我们以CompanyUser表和MemberShip表为例说明如下:      比如我们有个虚构的业务流程(仅用于示例)如下:根据UserID找到对应的MemberShip记录,然后根据MemberShip记录

DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!

   DataRabbit 3.0重写了DataRabbit 2.0的ORM实现的内核,性能提升了90倍左右,结果是DataRabbit 3.0的ORM性能与直接使用ADO.NET的性能已经非常接近.这是如何做到的?   主要是基于两点:(1)DataRabbit 2.0 基于泛型和反射实现,而DataRabbit 3.0 基于泛型和Emit动态程序集实现.   DataRabbit 2.0使用反射机制将值在O和R之间传递,如此大量使用反射会使性能折损不少.DataRabbit 3.0在运行时,