開源.NET下的XML數據庫介紹及入門
比如我這次遇到的。一個小得不能小的工具,本來用sqlite+XCode很快就可以搞定的東東,“領導”說非要用XML存儲,那好吧。就用XML,雖然.NET操作XML很方便,但很好做。我的***反應是找一個C#操作XML文件的類,應該差不多了。沒想到就發現了XML數據庫這么個玩意,試用,初步還是不錯的,雖然有些小問題,也很久沒更新了。代碼資料還是老樣子,規矩看前面的博客說明,不在提示了。
XML Database初步介紹
XML Database是一套基于.NET 和 XML技術開發的數據庫產品,開發者是博客園的陳希章。其定位是面向.NET開發平臺的、小型的、面向對象的數據庫,比較適合于本地數據緩存、嵌入式數據庫應用的場景。上次更新日期是2011年了,沒有仔細去研究源碼,核心的程序集也才25K,所以夠輕量級。那說說其基本特點,更新后的版本的說明沒有找到,就看最老的版本的吧:
1.完全基于XML的存儲。數據庫的配置信息和對象數據、索引、日志全部是用XML格式保存的。這樣的出發點主要是XML數據格式很易于閱讀和傳輸,轉換。
2.基于文件夾的數據存儲。這個作者曾經有些猶豫,有時候也覺得沒必要,但如果關系復雜點的對象,還是有用的。
3.完全基于.NET編寫,結合了LINQ的語法。這個數據庫引擎也可以算是一個所謂的嵌入式的數據庫引擎吧,它是通過一個dll提供了全部的功能。目前提供的查詢是基于LINQ to Object的,所有的操作都是面向對象的。
4.目前有的功能主要是數據庫的創建、打開和關閉,以及面向對象的增刪查改,簡單的批處理和事務控制等。
簡單入門例子
存儲是面向對象的,對每一條數據,都會有一個GUID編號,可以去看生成的XML文件得知。平時我們要存儲在數據庫的對象,一般就是實體了,那看看我這個實體的簡單結構:
- /// <summary>人臉數據</summary>
- public class Faces
- {
- #region 屬性
- /// <summary>姓名</summary>
- public String Name { get; set; }
- /// <summary>年齡</summary>
- public Int32 Age { get; set; }
- /// <summary>性別</summary>
- public String Sex { get; set; }
- /// <summary>手機號碼</summary>
- public String Tel { get; set; }
- /// <summary>圖片位置</summary>
- public String Position { get; set; }
- /// <summary>圖像的特征值,不支持存儲數組類型,要轉換才行</summary>
- public string Eigenvalue { get; set; }
- #endregion
- }
值得注意的是,我試了一下,好像不支持存儲數組結構,所以是數組的,要手動轉換一下。比如這個特征值,是double[]數組,用的時候,讀出來,要轉換為double[]才能用。格式嘛,自己定。看基本操作:
- //數據庫沒有會自動創建
- using (XDatabase db = XDatabase.Open(Main.DbName))
- {
- //然后循環將特征值和圖像對應起來,添加到數據庫
- for (int i = 0; i < 20; i++)
- {
- //添加圖片信息
- Faces cut = new Faces();
- cut.Name = Names[i];
- cut.Sex = Sexs[i];
- cut.Tel = Teles[i];
- cut.Age = Ages[i];
- cut.Position = fileNames[i];
- //添加特征值
- cut.Eigenvalue = DoubleArrayToString (MeanB[i]);
- //保存到數據庫
- db.Store(cut);
- }
- //查詢,結果是IEnumerable<T>類型,可以用LINQ操作
- var t = db.Query<Faces>();
- }
其實很簡單,輕量級的操作就是保存和查詢,更新,更新的操作很簡單,和保存一樣,內部會識別是新增的數據還是更新數據。查詢的結果是IEnumerable<T>類型,所有可以很方便的使用LINQ來得到你所要的結果。
當然還可能有其他的一些功能,比如事務,我的工具太簡陋,沒有用上,可以研究下。
說明一下,不要也不要說功能有限,有時候我們的需求就這樣,簡單的可以就行,沒必要搞那么復雜。OK,就算拋磚引玉吧,作者后來的更新也沒有說明,如果使用,可以用Nuget來獲取***的安裝包,地址看下節。
相關資源
開源網址:http://xmldatabase.codeplex.com/
作者博客:http://www.cnblogs.com/chenxizhang/
Nuget地址:http://nuget.org/packages/XMLDatabase
原文鏈接:http://www.cnblogs.com/asxinyu/archive/2013/03/25/2980086.html