Search code examples
c#.netnhibernatefluent-nhibernatenhibernate-mapping

Mapping entities for Sql Server Identity and Oracle Sequence with NHibernate


I have a application that uses C# and NHibernate and it will support SQL Server 2008, SQL Server 2012 and Oracle. I have been using fluent nhibernate to map my entities and I have some questions about how should I map the ID. Oracle supports only the Sequence, SQL Server 2008 only identity and Sql Server 2012 both. I would like to map in Sql Server (2008 and 2012) with Identity and Oracle with Sequence on the same code.

How should I map the ID to work for all databases?

It does not matter if I will have some IF's statement on my fluent mapping code. Looks my codes for mapping:

For SQL:

Id(x => x.Id).GeneratedBy.Native();

For Oracle:

Id(x => x.Id).GeneratedBy.Sequence("SQ_Customer");

PS: I do not want any workaround to achieve it. I want a NHibernate/Fluent-NHibernate solution to map it.


Solution

  • Well, "Native" chooses Identity, sequence or HILO automatically depending on the used DB.

    Using this xml mapping it should use identity or the sequence sq_customer if its Oracle:

      <generator class="native" >
        <param name="sequence">sq_customer</param>
      </generator>
    

    This post describes things further.