中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解C#開源輕量級對象數據庫NDatabase

發布時間:2021-10-29 16:48:34 來源:億速云 閱讀:247 作者:柒染 欄目:編程語言

如何理解C#開源輕量級對象數據庫NDatabase,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

今天向大家介紹一款.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方法,才能夠使用。

OdbConfiguration.RegisterLogger(new Log4NetLogger());

2.2 使用索引

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

using (var odb = OdbFactory.Open("index1.ndb"))  {      var fields = new[] { "Name" };      odb.IndexManagerFor<Player>().AddUniqueIndexOn("nameIndex", fields);      odb.IndexManagerFor<Game>().AddIndexOn("nameIndex", new[] { "Result" });  }

2.3 使用事務

NDatabase可以使用事務來保證數據的完整性(ACID:原子性,一致性,隔離性,持久性)。當一個NDatabase被打開后,將會自動創建一個會話,包含一個特殊的當前事務對象,這個事務對象實例管理當前所有的數據和數據操作行為。

2.4 內存數據庫模式

NDatabase可以將數據庫所有數據直接加載到內存中,直接使用OdbFactory方法的 OpenInMemory即可。

2.5 關于觸發器

要增加一個觸發器,首先要建立一個實現了Trigger 接口()的類,該接口有4種可用的類型(InsertTrigger,UpdateTrigger,SelectTrigger,DeleteTrigger)。如:

public class MyTrigger : InsertTrigger  {      public override bool BeforeInsert(object obj)      { return true; }       public override void AfterInsert(object obj, OID oid)      { }  }

在使用過程中,打開數據庫后,要注冊觸發器,才能使用:

var mage = new Mage("Merlin", 3.3, 3.4);  var myTrigger = new MyTrigger();   using (var odb = OdbFactory.Open("inserting_trigger.db"))  {      odb.TriggerManagerFor<Mage>().AddInsertTrigger(myTrigger);      odb.Store(mage);  }

2.6 擴展數據庫架構

在數據庫的使用周期中,類型的定義可能會改變,NDatabase提供了重構管理接口,可以擴展數據庫架構,使用IRefactorManager可以重命名類型名稱和字段名稱,以及增加和刪除字段。如下列代碼:

using (var odb = OdbFactory.Open("Refactoring.odb"))  {      var refactorManager = odb.GetRefactorManager();      refactorManager.RenameField(typeof(User), "age", "_age");      refactorManager.RenameField(typeof(User), "name", "_name");  }

2.7 自定義日志接口

2.1節中提到了日志的配置,可以自定義日志類,注冊后使用,如下所示:

public class Log4NetLogger : ILogger  {      private static readonly ILog Log = LogManager.GetLogger(typeof (ILogger));       #region Implementation of ILogger       public void Warning(string message)      {  Log.Warn(message); }       public void Debug(string message)      {  Log.Debug(message);}       public void Info(string message)      {  Log.Info(message); }       public void Error(string message)      {  Log.Error(message);}       public void Error(string message, Exception t)      {          Log.Error(message);          Log.ErrorFormat("Error: {0}, exception: {1}", t.Message, t);      }      #endregion  }

2.8 異常處理

NDatabase使用內部的異常處理類型來處理錯誤,以下是NDatabase中的異常類型:

BTreeException

BTreeNodeValidationException

DuplicatedKeyException

CorruptedDatabaseException

LinqQueryException

2.9 非持久屬性

如果有一些屬性不想保存到數據庫,可以使用[NonPersistent]屬性。

3.實際使用的幾個例子

使用之前當然要先有實體類,例子的實體類采用最簡單的,這里有些地方就不寫出來了。

3.1  2個保存對象的例子

先看簡單的:

var sport = new Sport("volley-ball"); using (var odb = OdbFactory.Open(TutorialDb5MinName))//打開數據庫     odb.Store(sport);

再看復雜的:

View Code   var volleyball = new Sport("volley-ball");  var player1 = new Player("julia", DateTime.Now, volleyball);  var player2 = new Player("magdalena", DateTime.Now, volleyball);  var player3 = new Player("jacek", DateTime.Now, volleyball);  var player4 = new Player("michal", DateTime.Now, volleyball);  var team1 = new Team("Krakow");  var team2 = new Team("Skawina");  team1.AddPlayer(player1);  team1.AddPlayer(player2);  team2.AddPlayer(player3);  team2.AddPlayer(player4);  var game = new Game(DateTime.Now, volleyball, team1, team2);  using (var odb = OdbFactory.Open(TutorialDb5MinName))      odb.Store(game);

3.2 再看看幾個簡單的查詢例子

最簡單的,注釋就免了,都比較簡單

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

看看這種,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)); }

簡單的例子就寫這么多吧。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

句容市| 铁岭市| 白沙| 河间市| 宣武区| 皮山县| 巩留县| 红河县| 张家港市| 嘉禾县| 丰县| 道孚县| 孝义市| 舟曲县| 罗源县| 麻栗坡县| 娄底市| 于田县| 西乌| 偏关县| 嘉荫县| 昌邑市| 资讯| 新宾| 嘉义县| 甘泉县| 宜宾市| 德江县| 常德市| 菏泽市| 桦川县| 南宁市| 烟台市| 共和县| 南昌县| 定日县| 广元市| 临城县| 甘泉县| 长宁区| 博白县|