DataRabbit 轻量的ORM框架

来源:互联网 发布:淘宝千里眼要钱吗 编辑:程序博客网 时间:2024/05/16 00:36

 (最新版本为DataRabbit 3.2,请到本文末下载处下载。最后更新:2008.11.20)

   DataRabbit支持基于关系(Relation)的数据库操作和基于ORM的数据库操作,内置了对Oracle和SqlServer的支持,并且可以通过插件的方式对其它数据库类型提供支持。DataRabbit中的所有访问器(都实现了
ITransactionAccesser接口)即可以在事务上下文中访问数据库,也可以在非事务中访问数据库。使用DataRabbit,几乎可以避免98%的需要在程序中手写的Sql语句,这样,你的程序会更安全,并且更容易修改和维护。

   在正式了解DataRabbit之前,也许先读一下《
DataRabbit的背后(1)-―走进DataRabbit上下文》效果更好,这篇文章为了解DataRabbit做了一些必要的铺垫。

1.DataRabbit中的访问器  
   DataRabbit主要包含以下几种访问器:
(1)针对ORM的访问器(
IOrmAccesser)(及 续篇
(2)针对数据库的Relation访问器(
IRelationAccesser
(3)针对Table的Relation访问器(
ITableAccesser
(4)针对存储过程的访问器(
ISPAccesser
(5)基于ORM的对象关系加载器(
IEntityRelationLoader
(6)数据大纲访问器(
IDataSchemaAccesser

     所有的访问器都向使用者屏蔽了地层的IDbCommand、IDbConnection等对象,使用者不必再关心打开连接、执行命令、关闭连接等繁琐底层的操作。这些访问器都从
ITransactionAccesser接口继承,它们的类图如下所示:



   DataRabbit的ORM非常轻量,它具有如下特点:
(1)使用Emit与泛型技术实现ORM访问器(IOrmAccesser),与手写SQL的效率几乎相当。
(2)使用ORM不需要任何配置文件(采用“约定”优于“配置”原则,Entity对象与数据表结构完全一致,可由工具EntityCreator自动生成)
(3)可以将数据库之间的主从表关系映射为Entity之间的关系,并可以依据主外键来加载Entity。
(4)对数据库表的结构没有任何要求。(比如,有的ORM框架要求数据表必须具有主键等)

(5)支持高效的“部分更新(partial update)”。

2.大纲操作 

   DataRabbit支持与数据大纲(DataSchema)相关的操作,比如提取某个数据库表的大纲,或者依据某个大纲创建对应的数据库表。这可以通过 IDataSchemaAccesser 接口来完成。与大纲操作相关的类图如下所示:




3.数据分页
   可以通过IPagerManager接口来进行数据分页操作(全部采用程序实现,不需要存储过程的支持)。



4.DataRabbit入口 -- TransactionScopeFactory     

     作为使用DataRabbit框架的入口点,一个TransactionScopeFactory实例就对应着一个数据库。

     也可以这么说,针对一个特定的数据库,我们的应用只需要维护一个TransactionScopeFactory实例即可。

DataConfiguration config = new DataConfiguration(DataBaseType.SqlServer, "localhost""sa""pwd""TestDB"null);
TransactionScopeFactory transactionScopeFactory 
= new TransactionScopeFactory();
transactionScopeFactory.DataConfiguration 
= config;            
transactionScopeFactory.Initialize();

 

     通过TransactionScopeFactory我们可以获取TransactionScope对象,而上述的各种访问器、大纲操作者、分页管理器等等实例都可以通过TransactionScope中的对应方法获得。

   比如,获取针对表Student的ORM访问器:

IOrmAccesser<Student> stuOrmAccesser = transationScope.NewOrmAccesser<Student>(null);
//获取所有年龄大于20岁的学生
IList<Student> stuList = stuOrmAccesser.GetMuch(new Filter(Student._Age, 20, ComparisonOperators.Greater));

     关于如何更好的使用DataRabbit框架,可以参考 使用DataRabbit的最佳实践 一文。

 

5.对N层架构的支持
   DataRabbit如何更好地融合到N层架构中了?如何支持BL层、Data层、BEM层?
(1)TransactionScope,事务范围,从某个事务返回对象获取的各种访问器实例都工作于同一个事务上下文中。TransactionScope实例通常在Business Flow子层中创建。
(2)将DataRabbit融入架构

(3)三层架构中使用DataRabbit的最佳实践 

   在后续的文章中,会逐一介绍上面提到的各个DataRabbit组件,下面给出DataRabbit框架的最新版本dll下载,以及一个非常简单的ORM示例源程序,大家可以仿这段程序尝试一下DataRabbit的ORM功能。


资源下载:
1.最新版本DataRabbit 3.2下载(内含EntityCreator)!注意,从3.2版本开始,DataRabbit由3个dll合成1个了。V3.2兼容V3.1(最后上传于 2008.11.20
2.DataRabbit 完全手册V1.0


其它文章:
(1)DataRabbit 3.0 ORM性能大幅度提升!
(2)DataRabbit 3.0 与 Linq to sql 性能比较
(3)Batch Insert 批插入!
(4)实体缓存EntityCache  (2008.05.28)

转自http://www.cnblogs.com/zhuweisky/archive/2007/03/19/680013.html

原创粉丝点击