Je n'ai pas connaissance d'un moyen de faire ce que vous demandez par le biais des fichiers de cartographie. Je ne pense pas qu'il en existe un.
La façon dont j'aborderais le problème est de brancher un PreInsertListener et de faire l'instruction de sélection que vous fournissez dans votre question pour récupérer la valeur de la réponse SortOrder juste avant que l'entité ne soit enregistrée.
Voici à quoi cela ressemblerait en gros :
public class NHibernateEventListeners : IPreInsertEventListener
{
public bool OnPreInsert(PreInsertEvent auditEvent)
{
var audit = auditEvent.Entity as YourEntityTypeHere;
if (audit == null)
return false;
int sortOrderValue =
(int)auditEvent.Session.CreateCriteria<YourEntityTypeHere>()
.SetProjection(Projections.Max("SortOrder"))
.Add(Restrictions.Eq("CategoryID", CatID)).UniqueResult();
SetValue(auditEvent.Persister, auditEvent.State, "SortOrder", sortOrderValue + 1);
audit.DateCreated = sortOrderValue + 1;
return false;
}
}