2010-11-04 20 views
2

我正在使用NHibernate/Fluent NHibernate和Oracle,我遇到了一個問題。我有定義瞭如下映射文件:如何正確使用Fluent NHibernate獲取Oracle中的下一個序列?

public OrderMap() 
{ 
    Table("ORDERS"); 
    Id(x => x.OrderId, "ORDER_ID").GeneratedBy.Sequence("select ORDERS_SQ.nextval from orders"); 
    Map(x => x.CreatedBy, "CREATED_BY"); 
    Map(x => x.OrderStatusCd, "ORDER_STATUS_CD"); 
    Map(x => x.StoreGroupId, "STORE_GROUP_ID"); 
    Map(x => x.IsActive, "IS_ACTIVE"); 
    Map(x => x.OrderDate, "ORDER_DATE"); 
} 

當我去跑項目中,我得到以下錯誤:

,同時創造一個SessionFactory使用了無效的或不完整的配置。

如果我刪除.GeneratedBy.Sequence("select ORDERS_SQ.nextval from orders");行,應用程序將運行,但我在保存記錄時顯然沒有看到下一個序列。我試過只做.GeneratedBy.Sequence("ORDERS_SQ");,但我似乎沒有得到任何正確的工作。

任何人都可以告訴我正確的方式來使用流利NHibernate正確地獲得下一個可用序列嗎?

我使用流利的NHibernate 1.1與NHibernate 3.0測試版。

謝謝。

回答

3

只要指定序列的名稱:

Id(x => x.OrderId).Column("ORDER_ID").GeneratedBy.Sequence("ORDERS_SQ"); 

// Real working code: 
Id(x => x.Id).GeneratedBy.Sequence("SEQ_Catalog1"); 
+0

這是正確的,但我的問題的一部分是,ID字段的數據類型不符合整體式檢查功能NHibernate創建之前做序列。改變後,一切正常。 – 2010-11-09 18:38:39

+0

你知道是否有辦法在一次往返中插入時返回生成的序列值? – Tsar 2012-08-13 15:15:07

+0

@Tsar當NHibernate插入一條記錄時,Save()方法返回帶有新ID的完整對象。在Update()的情況下,它會更新給定的記錄。 – rebelliard 2012-08-13 15:44:54

相關問題