首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data Oracle 自增欄位處理:Sequence + 覆寫 GetIdentityField

     編輯:關於ASP.NET

Oracle 無 Identity 欄位,靠 Sequence 實現自增

連線字串 providerName 設為 System.Data.OracleClient 或 Hxj.Data.Oracle 即可,其他操作 API 完全一致。關鍵在於實體類別處理自增邏輯。

實作步驟

  1. 資料庫建立 Sequence:CREATE SEQUENCE mysequence
  2. 資料表自增欄位:kid NUMBER(非 Identity)
  3. 實體類別覆寫兩個方法:
public override string GetSequence() {
    return "mysequence"; // 對應資料庫 Sequence 名稱
}

public override Field GetIdentityField() {
    return _.kid; // 指定哪個欄位為自增鍵
}

運作機制

  • Insert 前,組件自動呼叫 GetSequence() 取得 Sequence 名稱。
  • 產生 SQL:SELECT mysequence.NEXTVAL FROM DUAL 取得下一個值。
  • 將值指派給 GetIdentityField() 回傳的欄位(此處 kid)。
  • 執行 INSERT,並將自增值回填至實體屬性,Insert 方法回傳該值。

完整 Insert 範例

var entity = new MyTable { Name = "Test" };
long newId = DbSession.Default.Insert(entity); // newId 即為 Sequence 產生的值
// entity.kid 也同步被設定為 newId

實體產生工具更新

新版工具已內建 Oracle Sequence 支援,產生實體時自動偵測 Sequence 並產生上述兩個覆寫方法,並新增「首字母大寫」選項符合 .NET 命名慣例。

注意事項

  • Sequence 必須預先在資料庫建立,組件不會自動建立。
  • 若表有多個 Sequence(罕見),需自行在 GetSequence() 中依邏輯決定。
  • 搭配 DbBatch 批次插入時,每筆皆獨立取 Sequence 值,效能佳。

只要兩行覆寫,Hxj.Data 即能完美支援 Oracle 自增欄位,讓 Oracle 專案同享 Insert 回傳自增值的便利。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved