我在工作中使用的自己实现的超简易ORM工具

我在7月份到了家新公司,要维护一个在原来.net1.1上的系统。我进去一看代码就傻了眼了,满屏的SQL语句,看得脑袋嗡嗡的.但是苦于.net1.1,又不敢大动直接上其他的orm..顺便 Castle Activerecord 的.net1.1版还真用不来,于是一怒之下,决定自己动手,自己搞一个,遂自己瞎糊弄了一个,在项目中用了,感觉良好,嘿嘿,先不多说,把代码统统拷上来:

Code

 

以上就是全部代码,直接编译就可用  .

       功能非常简单,只支持SqlServer, 和单张表操作,其他一律不考虑,复合主键也不考虑(反正这个项目里也用不着其他东西) 主键提供了4种生成机制,guid,comb,自增,和指定。 其实基本的思路非常简单,就是定义了三个 attribute, 一个指示是一个表,一个指示是主键,一个指示字段,顺便指定字段的类型。然后搞了个基类,凡是继承此基类的自动就可以save,update,delete.  顺带把事务支持也加进去了,这样基本上算是可以用了,运行至现在情况良好。反正这个不算什么机密,于是厚着脸皮就发上来了。

      当然光有这还不够,实体类的生成也很麻烦,但是我这有位大哥管建立数据库,而且他还会给字段加注释,那最好,于是我就写了个存储过程自动生成实体类

Code

最后当然是使用拉,使用非常简单,先声明一个事务空间,然后实例化一个实体类,然后调用Save,就一切OK了

 

Code

由于是.net1.1,没有泛型,所以在查询时取得实例遇到了不少麻烦,我最后的办法是在查询的时候,传个类型参数进去,然后在ArrayList.ToArray()的时候强制转型,也算是可以凑合。

Code

 实现了这个东西,自我感觉还不错,也算是自己一个小提高啊,呵呵

       在实现这个的时候,主要遇到了这么几个问题:Castle ActiveRecord 的 SessionScope 只要声明了一个,以后的数据连接就自动都会使用它,我一直没搞明白他是怎么做到的,这里我也想实现同样的功能,于是看了他的代码,(没看懂-_-)但是大致上知道了他是在System.Web.HttpContext.Current 里放了一个栈,每次要取的时候就去读栈里顶上的那个SessionScope.于是我也依葫芦画瓢弄了个,还成,挺象的.

        不用拼Insert和Update的感觉真是不错,效率可是高多了。

 

posted @ 2008-12-24 14:43  烙馅饼喽  阅读(4563)  评论(20编辑  收藏  举报