Ich habe festgestellt, dass der beste Weg, um diese Aufgaben durchzuführen, sie in Code schreiben und nicht in die Datenschicht leckt. Ich lasse NHibernate es nicht berechnen. Ich behandle dieses Konzept als vollwertiges Merkmal der Anwendung. Das ist schön, weil ich Tests dafür schreiben kann und Flexibilität habe. Manchmal sind andere Faktoren an der Berechnung der nächsten Sequenznummer beteiligt, wie eine Beziehung zu einer anderen Entität. Vielleicht möchten Sie fortlaufende Bestellnummern im Bereich eines Mandanten: 02-001, 02-002 für Mandant 02 und 01-001, 01-002 für Mandant 01.
Also fördere ich das Konzept einer SequneceNumber zu einer Domain Modellobjekt, mappiere es mit NHibernate und mache die Logik auf meiner Seite. Jedes Mal, wenn ich einen neuen benötigen, verwende ich eine Schnittstelle, die so etwas wie
public interface ISequenceRepository
{
string GetNextSequenceNumber(Customer customer);
}
Und es schafft die aktuelle Sequenznummer in einem Datensatz (pro Kunden) in einer Datenbanktabelle aussieht. Wenn ich diese Funktion aufrufe, erhöht sie den Platzhalter in der Datenbank und gibt den Wert zurück.
Eine Factory hängt von dieser Schnittstelle ab und verwendet sie zum Aufbau der Objekte, die eine Sequenznummer benötigen.
Was ist Ihr Id-Generator? Warum benutzt du das nicht als ID? Gibt es irgendwelche Anforderungen an die Bestellnummer (wie sequenzielle etc.?) – Rashack
Was ist Ihre Anforderung an OrderNumber, kann es eine beliebige Nummer oder String und Nummer oder etc? –
OrderNumber muss eine fortlaufende Nummer sein. Löcher sind ok. Die ID ist eine Guid, die von der Anwendung zugewiesen wird. Wir möchten keine Geschäftskennung (OrderNumber) als Primärschlüssel verwenden. Ist es möglich, einen nHibernate Generator auf einer regulären Eigenschaft zu verwenden? –