2

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 或使用 DEFAULT 关键字:

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

如果我错了,请纠正我,但我认为上述语句永远不会由 NHibernate 生成?

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

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

提前致谢

4

1 回答 1

2

您可以使用属性映射中的生成属性来完成此操作。对于数据库设置的默认值,请使用generated="insert". 对于 Fluent 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; }
    }
}
于 2011-03-23T16:16:20.577 回答