2011-03-23 66 views
2

設置是否有可能與NHibernate和SQL Server插入一個實體,並設置列值中的一個新生成的身份?NHibernate的:與標識值插入實體上不同的列

純SQL我可以通過添加默認值做

創建該表:

create table Test 
    id int identity, 
    name varchar(12), 
    parentId int NOT NULL 

添加約束:

alter table Test constraint ... default ident_current('Test') for parentId 

而且事後跳過的parentId或使用DEFAULT關鍵字:

insert into Test values('TEST') 
insert into Test values('TEST', DEFAULT) 

糾正我,如果我錯了,但我認爲,上述聲明是永遠不會被NHibernate的生成?

現在,我先救我的實體,然後與新創建的身份進行更新。這種情況下剎車的數據庫結構,因爲我不得不讓這個特定的列接受空值。

起初,我以爲這是一件容易的事,但現在,幾個小時後,我仍然無法找到答案:/

在此先感謝

回答

2

您可以使用生成的屬性做到這一點在property mapping。對於數據庫設置的默認值,請使用generated="insert"。對於流利NHibernate映射使用.Generated().Insert()

編輯:

public class Test 
{ 
    private Test _parent; 

    public Test() 
    { 
     _parent = this; 
    } 

    public Test Parent 
    { 
     get { return _parent == this ? null : _parent; } 
     set { _parent = value ?? this; } 
    } 
} 
+0

傑米你好,感謝您對屬性的信息,但我想這意味着設置生成後=「插入」我將不能夠明確指定自己的價值,而無需刷新實體? – MonkeyCoder 2011-03-23 17:57:56

+0

我不知道。如果我明白這個問題,你想要默認父對象與對象相同,但是當然,你也需要能夠設置父對象。我將編輯我的答案,以顯示我如何處理這種情況。 – 2011-03-23 18:05:59

相關問題