2009-07-17 37 views
1

如何配置NHibernate的與這樣的列上創建了DB模式:NHibernate的+默認GETDATE()列

create_dt datetime not null default getdate() 

我有這樣的映射文件:

<property name="create_dt" update="false" insert="false" generated="insert" not-null="true" /> 

有無論如何,我可以注入sql server特定default getdate()generated properties的文檔甚至提到這是你如何處理create_date字段。我只是不知道如何使我的數據庫架構正確生成。我需要手動編輯創建表腳本嗎?

類似question

編輯:我想通了,我可以隨時更改表模式,如下所示:

<database-object> 
    <create>ALTER TABLE Report ADD CONSTRAINT DF_report_create_dt DEFAULT getdate() FOR create_dt;</create> 
    <drop></drop> 
    </database-object> 

,我可以以同樣的方式添加觸發器的update_dt類型的字段。這似乎比提供使用getdate()的顯式插入和更新語句更好。

回答

4

我送花兒給人更喜歡使用NHibernate的事件系統設定等生成日期或我的審計屬性更新日期。 (請參閱事件系統文檔here)。

我更喜歡這種方法,因爲它使邏輯超出了我的數據庫層,但它也使我能夠在我的代碼中擁有一個負責設置這些值的位置。如果我的所有實體都有一個共同的基類,那麼我甚至可以保證在我的域中始終如一的行爲。

2

這是對Hibernate的一個線程的答案...它應該在端口來NHibernate的不改變它...

https://forum.hibernate.org/viewtopic.php?f=25&t=996901&view=previous

請參閱最後發表的帖子。

做不到這一點,我總是產生一個對象在類的構造函數的「創建日期」:

public class MyClass 
{ 
    private DateTime createdDate; 

    public MyClass() 
    { 
     createdDate = DateTime.Now; 
    } 
} 
+1

+1在域中而不是數據庫中做它 – mxmissile 2009-07-17 19:47:30

+0

我想這只是太具體的數據庫。我想我必須使用自定義更新查詢來處理_update_dt_列。我可能只是編輯_create_dt_列的創建腳本。 – dotjoe 2009-07-17 19:59:42