Sie werden das nicht automatisch machen können; Die automatischen Nummerierungsfunktionen, die in ADO.NET integriert sind, sind auf die einzelne Tabelle beschränkt.
Also, vorausgesetzt, dass Sie Ihre eigene Methode, um damit umgehen zu müssen, was ist der beste Weg?
Wenn Sie eine Datenbank verwenden, würde ich vorschlagen, dass Sie eine vierte Tabelle verwenden, die ID-Spalte in den drei Haupttabellen einen Fremdschlüssel machen, in dem Sie die ID der vierten Tabelle gespeichert haben, und das Einfügen einer Zeile synchronisieren vierte Tabelle mit Einfügen einer Zeile in eine der anderen drei. Etwas wie:
INSERT INTO Sequence (DateInserted) VALUES (GETDATE())
INSERT INTO TableA (SequenceID, ...) VALUES (@@SCOPE_IDENTITY(), ...)
Aber Sie wollen nicht, um eine Datenbank verwenden, die mir zeigt, dass Sie wirklich über die Persistenz dieser ID-Nummern nicht kümmern.Wenn sie wirklich brauchen nur zu existieren, während die Anwendung ausgeführt wird, können Sie nur ein statisches Feld verwenden, um die zuletzt verwendete ID zu speichern, und eine Hilfsklasse machen:
public static class SequenceHelper
{
private static int ID;
private static object LockObject = new object();
public static int GetNextID()
{
lock (LockObject)
{
return ID++;
}
}
}
Die Verriegelung nicht unbedingt notwendig ist, aber es gibt Es schadet nicht, diesen Code threadsicher zu machen.
Dann können Sie das TableNewRow
Ereignis auf jeder der drei Datentabellen, zB handhaben:
DataTable t = MyDataSet["TableA"];
t.TableNewRow += new delegate(object sender, DataTableNewRowEventArgs e)
{
r.Row["ID"] = SequenceHelper.GetNextID();
};
Dies wird, dass versichern Welches Verfahren auch immer zu jeder Tabelle eine neue Zeile hinzufügt - ob Ihr Code ist NewRow()
oder ein Aufruf Neue Zeile wird über ein datengebundenes Steuerelement hinzugefügt - für jede hinzugefügte Zeile wird die ID-Spalte auf die nächste ID gesetzt.