Fluent NHibernate - 如何使用GeneratedBy.Native()指定Id的序列名称

时间:2012-11-22 17:44:41

标签: c# fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我使用Fluent NHibernate,我需要使用GeneratedBy.Native()生成Id,以支持Oracle,DB2和MSSQL数据库。如果我尝试在Oracle上运行它并将新记录插入到表中,我得到:

Could not execute query: select hibernate_sequence.nextval from dual
System.Data.OracleClient.OracleException (0x80131938): ORA-02289: sequence does not exist

映射类:

public sealed class ListDataMap : ClassMap<ListData>
{
    public ListDataMap()
    {
        Table("LIST_DEF");

        Id(x => x.Id, "ID").Not.Nullable().GeneratedBy.Native();
        //other mapping
    }
}

如何指定序列的名称?我不想使用hibernate_sequence因为我需要多于1个序列而且我不想拥有1个共享序列。

谢谢!

1 个答案:

答案 0 :(得分:5)

我在这里找到答案:http://thatextramile.be/blog/2007/07/native-id-generation-with-nhibernate/

这很简单:

Id(x => x.Id, "ID").Not.Nullable().GeneratedBy.Native(
    builder => builder.AddParam("sequence", "SEQ_LIST_DEF")
);