J'ai trouvé que la meilleure façon d'exécuter ces tâches est de les écrire dans le code et ne pas les fuites dans la couche de données. Je ne laisse pas NHibernate le calculer. Je traite ce concept comme une fonctionnalité à part entière de l'application. C'est bien parce que je peux écrire des tests et avoir de la flexibilité. Parfois, il y a d'autres facteurs impliqués dans le calcul du numéro de séquence suivant, comme une relation avec une autre entité. Peut-être que vous voulez des numéros de commande séquentiels dans le domaine d'un client: 02-001, 02-002 pour le client 02 et 01-001, 01-002 pour le client 01.
Donc je fais la promotion du concept d'un SequneceNumber dans un domaine objet de modèle, le mapper avec NHibernate et faire la logique de mon côté. Chaque fois que je besoin d'un nouveau, j'utilise une interface qui ressemble à quelque chose comme
public interface ISequenceRepository
{
string GetNextSequenceNumber(Customer customer);
}
et gère le numéro de séquence en cours dans un enregistrement (par client) dans une table de base de données. Chaque fois que j'appelle cette fonction, il incrémente le place-keeper dans la base de données et renvoie la valeur.
Une usine dépend de cette interface et l'utilise pour créer les objets qui ont besoin d'un numéro de séquence.
Quel est votre générateur Id? Pourquoi n'utilisez-vous pas cela comme ID? Existe-t-il des exigences sur le numéro de commande (comme séquentiel, etc.?) – Rashack
Quelle est votre exigence sur OrderNumber, Peut-il être un nombre ou une chaîne et un numéro ou etc? –
OrderNumber doit être un nombre séquentiel. Les trous sont ok. L'identifiant est un repère attribué par l'application. Nous ne voulons pas utiliser un identifiant d'entreprise (OrderNumber) comme clé primaire. Est-il possible d'utiliser un générateur nHibernate sur une propriété régulière? –