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

Ond*_*ouk 0 c# nhibernate-mapping fluent-nhibernate 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
Run Code Online (Sandbox Code Playgroud)

映射类:

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

        Id(x => x.Id, "ID").Not.Nullable().GeneratedBy.Native();
        //other mapping
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ond*_*ouk 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")
);
Run Code Online (Sandbox Code Playgroud)