Question

Je travaille sur c # .net 4.0 et en utilisant NHibernate pour parler avec un Oracle DB. Vous penseriez quelque chose d'aussi simple que cela est déjà traité quelque part, mais malheureusement ce ne est pas. J'ai besoin Nextval d'une séquence Oracle. Je ne ai pas besoin d'insérer une base de données dans le cadre d'un identifiant ou une clé primaire. Je viens besoin d'utiliser la prochaine val du côté c #.

Aide quelqu'un peut-il me avec mapping XML et le fichier C # (ou un lien) pour y parvenir.

Merci.

Quelque chose comme

int NextValueOfSequence = GetNextValueofSequence();

public int GetNextValueOfSequence()
{

// Access NHibernate to return the next value of the sequence.

}
Était-ce utile?

La solution

Cartographie:

  <sql-query name="GetSequence" read-only="true">
    <return-scalar type="Int64"/>
    <![CDATA[
    SELECT SeqName.NEXTVAL from DUAL;
    ]]>
  </sql-query>

Code:

Int64 nextValue = session.GetNamedQuery("GetSequence").UniqueResult<System.Int64>();

Autres conseils

fait aussi l'affaire.

 <your session variable>.CreateSQLQuery("select <your sequence>.NEXTVAL from dual").UniqueResult<Int64>();

Avec NH4 J'utilise cette méthode d'extension DB agnostique ISession (évidemment DB doit prendre en charge des séquences)

public static T GetSequenceNextValue<T>(this ISession session, string sequenceName) where T : struct
{
    var dialect = session.GetSessionImplementation().Factory.Dialect;
    var sqlQuery = dialect.GetSequenceNextValString(sequenceName);
    return session.CreateSQLQuery(sqlQuery).UniqueResult<T>();
}

Il y a une petite correction dans la cartographie donnée par @Petr Kozelek

<sql-query name="GetSequence" read-only="true">
    <return-scalar column="NextNo" type="Int64"/>
    <![CDATA[
        SELECT SeqName.NEXTVAL as NextNo from DUAL
    ]]>
</sql-query>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top