ABP專案中生成基於資料庫順序的GUID

2021-09-08 05:16:21 字數 3396 閱讀 2848

///

///used to generate ids.

///public

inte***ce

iguidgenerator

using

system;

using

system.security.cryptography;

//////

implements

by creating sequential guids.

///this code is taken from

///public

class

sequentialguid : iguidgenerator

= new

sequentialguid();

private

static

readonly randomnumbergenerator rng =randomnumbergenerator.create();

public sequentialguiddatabasetype databasetype

//////

prevents a default instance of the

class from being created.

///use

.

/// private

sequentialguid()

public

guid create()

public

guid create(sequentialguiddatabasetype databasetype)

}public

guid create(sequentialguidtype guidtype)

byte guidbytes = new

byte[16

];

switch

(guidtype)

break

;

case

sequentialguidtype.sequentialatend:

//for sequential-at-the-end versions, we copy the random data first,

//followed by the timestamp.

buffer.blockcopy(randombytes, 0, guidbytes, 0, 10

); buffer.blockcopy(timestampbytes,

2, guidbytes, 10, 6

);

break

; }

return

newguid(guidbytes);

}//////

database type to generate guids.

/// public

enum

sequentialguiddatabasetype

//////

describes the type of a sequential guid value.

/// public

enum

sequentialguidtype

}

using

system;

//////

extension methods to make locking easier.

///public

static

class

lockextensions

}//////

executes given

by locking given

object.

/// ///

type of the object (to be locked)

///source object (to be locked)

///action (to be executed)

public

static

void locking(this t source, actionaction) where t : class

}//////

executes given

and returns it's value by locking given

object.

/// ///

return type

///source object (to be locked)

///function (to be executed)

///return value of the

public

static tresult locking(this

object source, funcfunc)

}//////

executes given

and returns it's value by locking given

object.

/// ///

type of the object (to be locked)

///return type

///source object (to be locked)

///function (to be executed)

///return value of the

public

static tresult locking(this t source, funcfunc) where t : class

}}

使用方法:

for (int i = 0; i < 100; i++)

注意:此處生成的基於sqlserver的guid在控制台裡面檢視並不是順序的,但是在資料庫中是可以進行順序排序的,因為sqlserver對guid的排序是有特定規則的,具體可以參考下面的文章

.net中guid的排序規則是從左到右依次進行排序,與數字排序規則一致;

sql server資料庫提供對guid型別的支援,在資料庫中稱為uniqueidentifier型別,但是排序規則比較複雜:

oracle資料庫未提供對guid型別的支援,使用的是raw bytes型別儲存資料raw(16),具體型別為,排序規則與guid在.net中規則一致;

mysql資料未提供對guid型別的支援,使用的是字串的型別儲存資料,使用是的char(36)型別,由於使用的是字串型別,排序規則與guid在.net中的規則一致。

學習資料庫的開始之巨集觀上了解專案中資料庫的設計過程

專案中資料庫設計的步驟 1.需求分析 2.概念結構設計 3.邏輯結構設計 4.資料庫的物理設計 5.資料庫實施和維護 正在做乙個簡單的網頁專案,在自己對資料庫設計一點都懂的情況下隨便設計了兩個資料庫表並已實現基於兩個資料表的簡單的處理過程。後來在老師的提醒下才知道乙個專案的 資料庫不是憑著自己的一點...

基於資料庫動態生成目錄樹示例

示例功能說明 基於資料庫動態生成目錄樹 支援無限級節點 核心類說明 com.treecache.vo.treeviewvo 節點資訊封裝物件 com.treecache.dao.treeviewdao treeviewvo find integer parentid 根據父節點id查詢所有子節點 c...

django 專案中資料庫的配置,及連線

首先去settings裡邊對資料庫進行配置 default 然後需要去init中輸入以下 import pymysql pymysql.install as mysqldb 現在就可以去建立所需要表和字段了 類名就是建立的表名,下邊的屬性為表中的字段,我們常用的有charfield 字元格式 int...