NHibernate:插入在另一列上设置了标识值的实体

NHibernate: Insert entity with identity value set on a different column

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

在纯SQL中,我可以通过添加默认值来实现

创建表:

1
2
3
4
create table Test
   id int identity,
   name varchar(12),
   parentId int NOT NULL

添加约束:

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

然后跳过parentId或使用DEFAULT关键字:

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

如果我错了,请纠正我,但我认为NHibernate不会产生上述声明?

现在,我首先保存我的实体,然后使用新创建的身份对其进行更新。 这种情况使db结构崩溃,因为我必须使该特定列接受NULL。

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

提前致谢


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

编辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test
{
    private Test _parent;

    public Test()
    {
        _parent = this;
    }

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