Gewusst wie: abrufen von auto-increment Id in ServiceStack OrmLite?
Einer Tabelle, die eine identity -:
[AutoIncrement]
public int Id { get; set;}
Beim einfügen einer neuen Zeile in die Datenbank, was ist die beste Methode zum abrufen der Id des Objekts?
Beispiel:
db.Einfügen<> (new User());
Den Wert der Id ist 0 nach dem einfügen, aber in der Datenbank, dies ist offensichtlich nicht der Fall. Die einzige Möglichkeit die ich sehe ist folgende:
Id = (int)db.GetLastInsertId();
Allerdings glaube ich nicht, das wäre eine sichere Entscheidung. Wenn es 100 Einsätze geschieht in der gleichen Zeit, eine Id für ein anderes einfügen kann zurückgegeben werden. In EF, wenn Sie eine insert die Id wird für Sie eingestellt.
Weiß wer, der beste Weg zu gehen über diese?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In ServiceStack.OrmLite v4 die standardmäßig auf die Verwendung von parametrisierten Abfragen es gibt ein paar Optionen in
db.Save()
die automatisch füllt die AutoIncrement-Id, e.g:Sonst können Sie die Letzte insert-id:
Hier sind weitere Beispiele präsentiert OrmLite die neuen API ' s.
Für OrmLite v3
Den richtigen Anruf
db.GetLastInsertId()
die für SQL-Server unter der Haube zum Beispiel Anrufe SELECT SCOPE_IDENTITY() liefert das zuletzt eingefügte id für dieses Verbindung.Dies ist sicher, weil alle anderen gleichzeitigen Einsätzen, die geschehen könnten, die mit unterschiedlichen DB-verbindungen. In Ordnung, für alle anderen, die dieselbe Verbindung verwenden, muss es entsorgt und entlassen Sie zurück in den pool.
Sollten Sie auf jeden Fall über das Unit of Work pattern, vor allem in diesen Szenarien, wickeln Sie die db-bezogenen codes in einem Transaktionsbereich.
In ormLite, realisieren Sie dies über IDbCommand und IDbTransaction (siehe Beispiel hier http://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.OrmLite/ServiceStack.OrmLite.Tests/ShippersExample.cs)
Den code betrachten, werden Sie feststellen, es wird weniger magisch und mehr die manuelle Programmierung, aber es ist eine Möglichkeit.
Update: Wie sehen hier, wenn Sie mit ServiceStack/ORMLite v4, Sie müssen nutzen Sie die parametrisierte Abfrage, um die ID eingefügt. Zum Beispiel: