我使用Fluent NHibernate作爲ORM層到我的Oracle 10g數據庫,並使用插入前觸發器創建插入記錄時的唯一ID(帶序列)。Int64到NUMBER(18)ID轉換錯誤
-- Within the trigger
SELECT myseqgen.nextval into :NEW.ID FROM DUAL;
在代碼中的id屬性是一個長(Int64的)不能轉換成十進制以更好地滿足我們所擁有的數據庫(公共庫)。我已經映射了該如下:
this.Id(x => x.Id, "ID")
.CustomSqlType("NUMBER(18)")
.CustomType(typeof(IdCustomType))
.GeneratedBy.TriggerIdentity();
雖然我已經創造了這個屬性的自定義類型,我不認爲我需要它,因爲在數據庫中,該ID的配置如下:
CREATE TABLE "SOME_SCHEMA"."MY_TABLE"
("ID" NUMBER(18,0), -- 18 means "anything up to 64 bit integer"
...
但有趣的是,在我的IdCustomType類的NullSafeSet方法中,「value」參數作爲十進制傳遞。
......不僅如此,但在檢查NHProf,插入語句令人擔憂變爲:
INSERT INTO MY_TABLE
(COL_ONE,
COL_TWO,
COL_THREE,
COL_FOUR,
COL_FIVE,
COL_SIX,
COL_SEVEN)
VALUES ('param one' /* :p0 */,
'param two' /* :p1 */,
NULL /* :p2 */,
'param three' /* :p3 */,
TIMESTAMP '2012-01-01 00:00:00.00' /* :p4 */,
'22' /* :p5 */,
'''81189'' [Type: String (5)], :nhIdOutParam = NULL' /* :p6 */) -- WHAT!?
returning ID into :nhIdOutParam
插入語句後,自動選擇我的併發標識的被調用:
SELECT someRow_.CONCURRENCY_COL as CON_2_1_
FROM MY_TABLE someRow_
WHERE someRow_.ID = 5836738 /* :p0 */
沒有發現任何東西。
有沒有人有任何建議?
謝謝, 羅布
您是否檢查過插入成功? – Firo 2012-02-23 16:43:26