連線字串 providerName 設為 System.Data.OracleClient 或 Hxj.Data.Oracle 即可,其他操作 API 完全一致。關鍵在於實體類別處理自增邏輯。
CREATE SEQUENCE mysequencekid NUMBER(非 Identity)public override string GetSequence() {
return "mysequence"; // 對應資料庫 Sequence 名稱
}
public override Field GetIdentityField() {
return _.kid; // 指定哪個欄位為自增鍵
}
Insert 前,組件自動呼叫 GetSequence() 取得 Sequence 名稱。SELECT mysequence.NEXTVAL FROM DUAL 取得下一個值。GetIdentityField() 回傳的欄位(此處 kid)。INSERT,並將自增值回填至實體屬性,Insert 方法回傳該值。var entity = new MyTable { Name = "Test" };
long newId = DbSession.Default.Insert(entity); // newId 即為 Sequence 產生的值
// entity.kid 也同步被設定為 newId
新版工具已內建 Oracle Sequence 支援,產生實體時自動偵測 Sequence 並產生上述兩個覆寫方法,並新增「首字母大寫」選項符合 .NET 命名慣例。
GetSequence() 中依邏輯決定。DbBatch 批次插入時,每筆皆獨立取 Sequence 值,效能佳。只要兩行覆寫,Hxj.Data 即能完美支援 Oracle 自增欄位,讓 Oracle 專案同享 Insert 回傳自增值的便利。