好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一款.NET下的开源轻量级对象数据库NDatabase

一款.NET下的开源轻量级对象数据库NDatabase

【原创翻译】C#开源轻量级对象数据库NDatabase介绍【原创资料限时奉送】

2013-02-20 09:35 by asxinyu, 1992 阅读,  93  评论,  收藏 ,  编辑

今天向大家介绍一款.NET下的开源轻量级对象数据库NDatabase,花了1天时间看了一下文档和一些例子。觉得有必要把一些东西整理成中文文档,也方便大家。本来想把以前的一个小项目改造一下,做一个例子的。无奈,时间不是很充足,还要忙着找工作。所以大家自己看看,这个数据库在某些方面还是很有用的。下面的总计都是按照官方文档进行翻译的,稍微去掉和修改了一些,总结了一下该数据库的一些特点和特性。然后把重点写出来了。简单的增删查改在后门的例子中。翻译水平有限,敬请指点:

1.前言

NDatabase是一个易于使用的.NET 对象数据库。为了避免关系数据库带来的开销,可以尝试用 NDatabase。NDatabase是新一代的面向对象数据库: 1 个原生的 .NET 数据库持久层。它的主要特征有:

 简单:NDatabase非常简单,很容易学习上手使用;它 API 是简单,不需要学习任何数据库映射技术;不需要对象和存储持久层之间的映射; NDatabase以最简单的方式存储对象;不需要安装和管理。  小:NDatabase 运行时小于300Kb ,部署程序的时候,很容易集成到 .NET 应用程序中去。  安全健壮:NDatabase支持 ACID 事务处理,保证数据的完整性。即使在硬件故障的情况下,所有的提交工作都会应用到数据库,在下一次启动的时候自动执行。 单一数据库文件:NDatabase使用单一的文件存储所有的数据,包括元数据,对象,索引等。 生产率:NDatabase使用很少的代码来进行数据持久化,不需要映射。因此,开发人员可以专注于业务逻辑的实现,而不是在数据持久层浪费时间。

2.NDatabase 入门

2.1  基础设置

NDatabase中所有的数据库引擎设置都在OdbConfiguration类中。如BTree Validation,和BTree index degree的设置都在这个类里面,打开日志的设置也在这个类里面。NDatabase提供了默认的日志类实现:ConsoleLogger,可以使用OdbConfiguration类中的EnableConsoleLogger方法进行设置。实现好自定义的日志类后,还需要进行注册RegisterLogger方法,才能够使用。

 1  OdbConfiguration.RegisterLogger( new  Log4NetLogger());

2.2  使用索引

使用 IOdb 接口的 IndexManagerFor方法可以为指定类型添加索引,如:

  1   using  ( var  odb = OdbFactory.Open( "  index1.ndb  "  ))
   2  
  3   {
   4  
  5       var  fields =  new [] {  "  Name  "   };
   6  
  7      odb.IndexManagerFor<Player>().AddUniqueIndexOn( "  nameIndex  "  , fields);
   8  
  9      odb.IndexManagerFor<Game>().AddIndexOn( "  nameIndex  " ,  new [] {  "  Result  "   });
  10  
 11  }

2.3  使用事务

NDatabase可以使用事务来保证数据的完整性(ACID:原子性,一致性,隔离性,持久性)。当一个NDatabase被打开后,将会自动创建一个会话,包含一个特殊的当前事务对象,这个事务对象实例管理当前所有的数据和数据操作行为。

2.4  内存数据库模式

NDatabase可以将数据库所有数据直接加载到内存中,直接使用OdbFactory方法的 OpenInMemory即可。 

2.5  关于触发器

要增加一个触发器,首先要建立一个实现了Trigger 接口()的类,该接口有4种可用的类型(InsertTrigger,UpdateTrigger,SelectTrigger,DeleteTrigger)。如:

  1   public   class   MyTrigger : InsertTrigger
   2  
  3   {
   4  
  5       public   override   bool  BeforeInsert( object   obj)
   6  
  7      {  return   true  ; } 
   8  
  9       public   override   void  AfterInsert( object   obj, OID oid)
  10  
 11       { }
  12  
 13  }

在使用过程中,打开数据库后,要注册触发器,才能使用:

  1   var  mage =  new  Mage( "  Merlin  " ,  3.3 ,  3.4  );
   2  
  3   var  myTrigger =  new   MyTrigger(); 
   4  
  5   using  ( var  odb = OdbFactory.Open( "  inserting_trigger.db  "  ))
   6  
  7   {
   8  
  9      odb.TriggerManagerFor<Mage> ().AddInsertTrigger(myTrigger);
  10  
 11       odb.Store(mage);
  12  
 13  }

2.6  扩展数据库架构

在数据库的使用周期中,类型的定义可能会改变,NDatabase提供了重构管理接口,可以扩展数据库架构,使用IRefactorManager可以重命名类型名称和字段名称,以及增加和删除字段。如下列代码:

  1   using  ( var  odb = OdbFactory.Open( "  Refactoring.odb  "  ))
   2  
  3   {
   4  
  5       var  refactorManager =  odb.GetRefactorManager();
   6  
  7      refactorManager.RenameField( typeof (User),  "  age  " ,  "  _age  "  );
   8  
  9      refactorManager.RenameField( typeof (User),  "  name  " ,  "  _name  "  );
  10  
 11  }

2.7  自定义日志接口

2.1 节中提到了日志的配置,可以自定义日志类,注册后使用,如下所示:

 

  1   public   class   Log4NetLogger : ILogger
   2  
  3   {
   4  
  5       private   static   readonly  ILog Log = LogManager.GetLogger( typeof   (ILogger)); 
   6  
  7       #region  Implementation of ILogger 
  8  
  9       public   void  Warning( string   message)
  10  
 11       {  Log.Warn(message); } 
  12  
 13       public   void  Debug( string   message)
  14  
 15       {  Log.Debug(message);} 
  16  
 17       public   void  Info( string   message)
  18  
 19       {  Log.Info(message); } 
  20  
 21       public   void  Error( string   message)
  22  
 23       {  Log.Error(message);} 
  24  
 25       public   void  Error( string   message, Exception t)
  26  
 27       {
  28  
 29           Log.Error(message);
  30  
 31          Log.ErrorFormat( "  Error: {0}, exception: {1}  "  , t.Message, t);
  32  
 33       }
  34  
 35       #endregion 
 36  
 37  }

 

 

2.8  异常处理

NDatabase使用内部的异常处理类型来处理错误,以下是NDatabase中的异常类型:

BTreeException

BTreeNodeValidationException

DuplicatedKeyException

CorruptedDatabaseException

LinqQueryException

2.9  非持久属性

如果有一些属性不想保存到数据库,可以使用 [NonPersistent] 属性。  

3.实际使用的几个例子

 使用之前当然要先有实体类,例子的实体类采用最简单的,这里有些地方就不写出来了。

3.1  2个保存对象的例子

先看简单的:

 1     var  sport =  new  Sport( "  volley-ball  "  );
  2     using  ( var  odb = OdbFactory.Open(TutorialDb5MinName)) //  打开数据库 
 3        odb.Store(sport);

再看复杂的:

View Code

3.2 再看看几个简单的查询例子

最简单的,注释就免了,都比较简单

  1   using  ( var  odb =  OdbFactory.Open(TutorialDb5MinName))
   2   {
   3       var  query = odb.Query<Player> ();
   4      query.Descend( "  Name  " ).Constrain( "  julia  "  ).Equal();
   5       var  players = query.Execute<Player> ();
   6  
  7      Console.WriteLine( "  \nStep 3 (Soda): Players with name julia  "  );
   8  
  9       foreach  ( var  player  in   players)
  10          Console.WriteLine( "  \t{0}  "  , player);
  11  
 12      Assert.That(players, Has.Count.EqualTo( 1  ));
  13  }

看看这种,LINQ的查询方式:

 using  ( var  odb =  OdbFactory.Open(TutorialDb5MinName))
{
      var  players =  from  player  in  odb.AsQueryable<Player> ()
                    where  player.Name.Equals( "  julia  "  )
                    select   player;

    Console.WriteLine(  "  \nStep 3 (Linq): Players with name julia  "  );

      foreach  ( var  player  in   players)
        Console.WriteLine(  "  \t{0}  "  , player);

    Assert.That(players.Count(), Is.EqualTo(  1  ));
} 

简单的例子就写这么多吧。实际的还有很多灵活的操作,比如比较,查询,还对表直接的关系等等。如果有兴趣,适合你,可以看后面的资源链接。

4.NDatabase资源

1.开源网址: https://ndatabase.codeplex.com/  

                  http://ndatabase.wix.com/home#!overview/c18h9

                  http://ndatabase.net/

2.教程地址:

                 官方5分钟入门使用教程

                 官方1分钟入门使用教程

                 NDataBase教程及说明文档

                 官方数据库性能测试及对比
3.自制的  NDatabase类库API帮助文档  和  英文版资料电子书

  最给力的是什么,当然是下载了,呵呵。据说,有下载的文章会吸引更多人。

     自己动手,丰衣足食。呵呵,做了一份  NDatabase类库API帮助文档  和  英文版资料电子书。

     需要的留下邮箱,21日中午12点钟左右发送,仅此一次。写篇文章不容易,希望大家不要吝啬哦。  

编程爱好者,关注.NET软件开发,Matlab编程及网络技术

http://www.cnblogs.com/asxinyu/

E-mail:asxinyu@qq.com

 

分类:  C#.NET开发 ,  Xcode开发 ,  开源技术

标签:  Xcode ,  对象容器 ,  NDatabase ,  对象数据库 ,  .NET对象数据库

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于一款.NET下的开源轻量级对象数据库NDatabase的详细内容...

  阅读:48次