2011-03-23 70 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

相关问题