NHibernate:在不同的列上插入具有标识值的实体

时间:2011-03-23 16:06:14

标签: 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

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

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

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

现在我首先保存我的实体,然后用新创建的身份更新它。这个案例会对db结构进行制动,因为我必须使该特定列接受NULL。

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

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用property mapping中的生成属性来完成此操作。对于数据库设置的默认值,请使用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; }
    }
}
相关问题