Obj2db 轻量级ORM框架(v0.6)

项目主页:http://idyj.net/blog/index.php?go=category_9 提供源代码下载和开发文档。

Obj2db是Object to database的简写,它是基于.NET 2.0的开源轻量级ORM工具。它最大的特点是通过类进行数据库操作,数据库对开发者来说是透明的。通过这样的设计使开发者节省大量的处理数据库操作的开发时间,编写更加面向对象的代码,提高了开发的效率。当然它也拥有足够好的性能。

  • 支持包括MS SQL Server、MySQL、SQLite、ACCESS在内的多种数据库,并可扩展。
  • 支持插件编程,可以对未知类型实现数据操作。
  • 开源项目(授权方式GPL V3),方便大家定制和学习。
  • 通过向导来进行程序的数据库配置,免去编写应用程序配置文件的。
  • 简单易用,完全面向对象,提高了开发效率。
  • 支持一对一、一对多的关联。
  • 跨平台特性,可以运行在Windows、Linux、Unix、Mac等多个平台。

设计Obj2db的初衷是为了能够保存插件中的类型,比如定义了接口或基对象,但因为插件是一个动态载入的程序集,里面的具体的实体类型(EntityClass)是未知的。如果要保存该对象,就必须能够为根据实体类型提供创建表格,实现保存,更新,删除,查询等功能。当然,你如果不使用插件机制编程,该ORM框架使用也是很方便的。抛开底层数据库的依赖性,你也可以把它当成一个面向对象的数据库看待。该组件具有很好的扩展性,可以根据你应用的场景去选择不同性能和规模的关系数据库作为基础。大型的项目可以选择Oracel、MS SQL Server、MySQL等;小型的项目推荐使用SQLite,ACCESS文件数据库。

 

最新版本:2008-10-26 版本:0.6.0

该版本改动较大,不再与以前的版本兼容,请注意更新。

  • 项目重命名为为Obj2db,更符合该项目的特点。
  • 添加对基本类型集合和数组的支持。
  • 支持新的类似 Db4o中的SODA的查询表达式。
  • 支持部分字段的查询。
  • 修正发生异常后SQLite的DataReader没有释放而无法释放Connection的Bug。
  • 修正ACCESS中无法创建shortint类型的自增字段的Dug。
  • 添加为数据库文件(针对SQLite,ACCESS)添加相对路径。
  • 为项目添加签名。

 

基本数据库操作风格:

  • 建表

            //如果表格存在,删除表格

            if (ObjDb.IsTableExist<User>())

                ObjDb.DeleteTable<User>();

            //新建表格

            ObjDb.CreateTable<User>();

  • 保存

            User u1 = new User("DYJ", "Deng Yangjun");

            u1.Alias = new string[] { "YJDENG", "DENG" };

            ObjDb.Save(u1);

  • 更新

            //跟新名称为YJDENG,不能跟新主键字段

            u1.Name = "YJDENG";

            ObjDb.Update(u1);

  • 删除

             //删除对象

            ObjDb.Delete(u1);

  • 查询

             //查询Name属性为YJDENG的对象

            Query q = new Query();

            q.Descend("name").Constrain("YJDENG");

            User[] result = ObjDb.Select<User>(q);

            foreach (User u in result)

            {

                Console.WriteLine("查询得到的对象:" + u.ToString());

      }

  • 事务

            //事务,把多个操作当成一个整体对待

            using(ObjDbConnection conn = ObjDbConnFactory.CreateDbConn())

            {

                conn.BeginTrans();

                conn.Save(u1);

                conn.Delete(u1);

                conn.CommitTrans();

            }

 

 

posted @ 2008-11-09 16:18  南桥一梦  阅读(4027)  评论(28编辑  收藏  举报