public async Task <object> GenerateAsync(ISessionImplementor session, object obj, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            var sql = new SqlString(session.Factory.Dialect.SelectGUIDString);

            try
            {
                var          st     = await(session.Batcher.PrepareCommandAsync(CommandType.Text, sql, SqlTypeFactory.NoTypes, cancellationToken)).ConfigureAwait(false);
                DbDataReader reader = null;
                try
                {
                    reader = await(session.Batcher.ExecuteReaderAsync(st, cancellationToken)).ConfigureAwait(false);
                    object result;
                    try
                    {
                        await(reader.ReadAsync(cancellationToken)).ConfigureAwait(false);
                        result = await(IdentifierGeneratorFactory.GetAsync(reader, identifierType, session, cancellationToken)).ConfigureAwait(false);
                    }
                    finally
                    {
                        reader.Close();
                    }
                    log.Debug("GUID identifier generated: " + result);
                    return(result);
                }
                finally
                {
                    session.Batcher.CloseCommand(st, reader);
                }
            }
            catch (Exception sqle)
            {
                throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "could not retrieve GUID", sql);
            }
        }
Exemple #2
0
 /// <summary>
 /// Generate an <see cref="Int16"/>, <see cref="Int32"/>, or <see cref="Int64"/>
 /// for the identifier by using a database sequence.
 /// </summary>
 /// <param name="session">The <see cref="ISessionImplementor"/> this id is being generated in.</param>
 /// <param name="obj">The entity for which the id is being generated.</param>
 /// <param name="cancellationToken">A cancellation token that can be used to cancel the work</param>
 /// <returns>The new identifier as a <see cref="Int16"/>, <see cref="Int32"/>, or <see cref="Int64"/>.</returns>
 public virtual async Task <object> GenerateAsync(ISessionImplementor session, object obj, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     try
     {
         var          cmd    = await(session.Batcher.PrepareCommandAsync(CommandType.Text, sql, SqlTypeFactory.NoTypes, cancellationToken)).ConfigureAwait(false);
         DbDataReader reader = null;
         try
         {
             reader = await(session.Batcher.ExecuteReaderAsync(cmd, cancellationToken)).ConfigureAwait(false);
             try
             {
                 await(reader.ReadAsync(cancellationToken)).ConfigureAwait(false);
                 object result = await(IdentifierGeneratorFactory.GetAsync(reader, identifierType, session, cancellationToken)).ConfigureAwait(false);
                 if (log.IsDebugEnabled)
                 {
                     log.Debug("Sequence identifier generated: " + result);
                 }
                 return(result);
             }
             finally
             {
                 reader.Close();
             }
         }
         finally
         {
             session.Batcher.CloseCommand(cmd, reader);
         }
     }
     catch (DbException sqle)
     {
         log.Error("error generating sequence", sqle);
         throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "could not get next sequence value");
     }
 }