NHibernate:插入标识值设置在不同列上的实体

NHibernate:插入标识值设置在不同列上的实体,nhibernate,insert-update,scope-identity,Nhibernate,Insert Update,Scope Identity,NHibernate和Sql Server是否可以插入一个实体并将其中一个列值设置为新生成的标识 在纯sql中,我可以通过添加默认值来实现 创建表: create table Test id int identity, name varchar(12), parentId int NOT NULL 添加约束: alter table Test constraint ... default ident_current('Test') for parentId 然后跳过pare

NHibernate和Sql Server是否可以插入一个实体并将其中一个列值设置为新生成的标识

在纯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或使用默认关键字:

insert into Test values('TEST')
insert into Test values('TEST', DEFAULT)
如果我错了,请纠正我,但我认为上述语句永远不会由NHibernate生成

现在,我首先保存我的实体,然后用新创建的标识更新它。本例阻止了db结构,因为我必须使该特定列接受null

起初我认为这很容易,但现在,几个小时后我仍然找不到答案:/


提前感谢

您可以使用中生成的属性来完成此操作。对于数据库设置的默认值,请使用
generated=“insert”
。对于流畅的NHibernate映射,请使用
.Generated().Insert()

编辑:


嗨,Jamie,谢谢你提供属性的信息,但我想这意味着在设置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; }
    }
}