自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DB4O設(shè)置自增ID的方法詳解

數(shù)據(jù)庫(kù)
我們知道,DB4O是一個(gè)開源的純面向?qū)ο蟮臄?shù)據(jù)庫(kù)引擎,我們常常在應(yīng)用的時(shí)候需要設(shè)置自增ID,那么如何設(shè)置呢?本文我們主要就介紹一下這部分內(nèi)容,希望能夠?qū)δ兴鶐椭?/div>

DB4O是一種開源的純面向?qū)ο蟮臄?shù)據(jù)庫(kù)引擎,它帶給了我們***的ORM體驗(yàn):

  • 直接存儲(chǔ)對(duì)象
  • 直接查詢, 更新, 刪除對(duì)象
  • 直接支持LINQ
  • 無(wú)需創(chuàng)建表結(jié)構(gòu), 更無(wú)需維護(hù)數(shù)據(jù)庫(kù)
  • 超小的數(shù)據(jù)庫(kù)引擎, 不到800KB
  • 原生支持C#和JAVA
  • 性能高效

而我們?cè)谑褂玫倪^(guò)程中常常需要設(shè)置自增ID,那么如何設(shè)置呢?接下來(lái)我們就開始介紹。

為對(duì)象增加自增ID

解決方案:

 

  1. Book book = new Book();  
  2. book.Id = ?;  
  3. Db4oFactory.OpenFile("Data.dat").Store(book); 

 

DB4O手冊(cè)上說(shuō), 不推薦對(duì)象使用Id屬性, 但這明顯是對(duì)這個(gè)問(wèn)題的回避:

對(duì)某些數(shù)據(jù)應(yīng)用而言, 如訂單, 流水線等, 自增Id是必不可少的, 此時(shí),如果采用DB4O作存儲(chǔ)的話:

1. 不得不手動(dòng)查詢得到當(dāng)前***Id然后持久化;

2. 對(duì)于復(fù)雜對(duì)象而言, 則需要遞歸檢查,確保每一級(jí)子對(duì)象自增Id都設(shè)置正確。。。這個(gè)是讓人難以接受的。

另一種解決方案:

1. 在DB4O中存儲(chǔ)一組 (類型 =>NextId) 對(duì)象, 用來(lái)保存每種持久化對(duì)象的Type和該類型的下一個(gè)自增Id值.

 

  1. /// <summary> 
  2. /// 內(nèi)部存儲(chǔ)使用, 保存每一種類型對(duì)象的***一個(gè)自增Id  
  3. /// </summary> 
  4. class SerialIdEntity  
  5. {  
  6. public Type ObjectType { get; set; }  
  7. public int NextId { get; set; }  

 

2. 用Attribute來(lái)標(biāo)記對(duì)象的Id自增屬性.

 

  1. class SerialIdAttribute : Attribute  
  2. {  
  3. }  
  4. class Book  
  5. {  
  6. [SerialId()]  
  7. public int Id  
  8. {  
  9. get; set;  
  10. }  

 

3. 持久化時(shí)反射檢查屬性是否有SerialIdAttribute, 若存在則先取出此類型的下一個(gè)自增Id, 并自增其類型對(duì)應(yīng)的NextId, 然后存儲(chǔ).

 

  1. /// <summary> 
  2. /// 保存對(duì)象: 檢查自增字段  
  3. /// </summary> 
  4. /// <param name="?"></param> 
  5. public static void Add(object obj)  
  6. {  
  7. Type t = obj.GetType();  
  8. foreach (var p in t.GetProperties())  
  9. {  
  10. #region 自增屬性  
  11. SerialIdAttribute[] ids = (SerialIdAttribute[]p.GetCustomAttributes(typeof(SerialIdAttribute), false);  
  12. if (ids.Length > 0)  
  13. {  
  14. SerialIdAttribute id = ids[ids.Length - 1];  
  15. p.SetValue(obj, GenerateNexId(t), null);  
  16. }  
  17. #endregion  
  18. #region 關(guān)聯(lián)子對(duì)象(含自增屬性)  
  19. //遞歸遍歷子對(duì)象  
  20. object subObj = p.GetValue(obj, null);  
  21. //...  
  22. #endregion  
  23. }  
  24. Db4oFactory.OpenFile("Data.dat").Store(obj);  
  25. }  
  26. private static int GenerateNexId(Type t)  
  27. {  
  28. SerialIdEntity sid;  
  29. var res = from so in Db4oFactory.OpenFile("Data.dat").Query<SerialIdEntity>()  
  30. where so.ObjectType == t  
  31. select so;  
  32. List<SerialIdEntity> data = res.ToList();  
  33. if (data.Count > 0)  
  34. {  
  35. sid = data[0];  
  36. }  
  37. else  
  38. {  
  39. sid = new SerialIdEntity(){ ObjectType = t };  
  40. }  
  41. sid.NextId++;  
  42. Db4oFactory.OpenFile("Data.dat").Store(sid);  
  43. return sid.NextId;  

 

同樣的問(wèn)題:

對(duì)復(fù)雜對(duì)象而言, 對(duì)象中關(guān)聯(lián)子對(duì)象, 存儲(chǔ)時(shí)需要遞歸遍歷檢查自己的屬性及子對(duì)象的屬性.DB4O中的ID SYSTEM有兩種. 一個(gè)是物理ID(即指向?qū)ο箸R像存儲(chǔ)位置的指針), 一個(gè)是UUID(需要在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定配置項(xiàng)), 都與自增無(wú)關(guān)。

關(guān)于DB4O設(shè)置自增ID的方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. Oracle數(shù)據(jù)庫(kù)中創(chuàng)建自增字段的代碼示例
  2. SQL Server Collation的問(wèn)題解決及特點(diǎn)分析
  3. 將.sql文件導(dǎo)入powerdesigner的實(shí)現(xiàn)方法詳解
  4. 手動(dòng)卸載SQL Server 2005數(shù)據(jù)庫(kù)及實(shí)例的詳細(xì)步驟
  5. 以SQL Server 2005為后臺(tái)的ASP網(wǎng)站訪問(wèn)慢的解決方案
責(zé)任編輯:趙鵬 來(lái)源: 博客園
相關(guān)推薦

2010-10-08 15:42:39

MySQL設(shè)置自增字段

2010-03-29 14:09:12

Oracle ID 自

2010-08-31 08:38:55

SQL Server

2022-11-08 19:30:52

DjangoID自增

2010-11-01 14:40:39

DB2自增字段

2024-12-25 15:32:29

2010-09-28 16:14:14

SQL Server自

2018-12-14 15:35:20

MySQL索引數(shù)據(jù)庫(kù)

2022-06-03 08:12:52

InnoDB插入MySQL

2024-06-14 08:34:36

2024-11-11 00:00:06

MySQLID數(shù)據(jù)類型

2010-04-30 12:15:42

Oracle自增ID

2023-10-24 15:27:33

Mysql自增主鍵

2010-11-29 11:39:11

Sybase自增字段

2010-11-12 10:38:24

SQL Server自

2023-12-26 01:09:28

MySQL存儲(chǔ)釋放鎖

2010-07-05 11:26:31

2023-10-17 09:41:04

自增主鍵MySQL

2010-04-26 14:03:02

Oracle使用

2011-01-18 09:47:33

自增ID
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)