Wie kann ich eine Idempotent Einfügezeile mit Unterschall mit einem SQL 2008-Backend durchführen?

StackOverflow https://stackoverflow.com/questions/2472997

Frage

Wie kann ich eine Idempotent Einfügezeile mit Unterschall ausführen mit einem SQL 2008-Backend?

z.

Ich habe eine Tabelle „Farben“ in dem Namen der Primärschlüssel ist.

Color c = new Color;
c.name = "red";
c.Save;

Color c2 = new Color;
c2.name = "red";
c2.Save; // throws duplicate key error;

Ich weiß, ich kann nur fangen die Fehler, aber ich würde etwas tun, lieber wie in MySql REPLACE

War es hilfreich?

Lösung

Falls Sie eindeutige Einschränkungen haben ich denke, dass die beste Option ist die Validierung selbst zu behandeln. wenn ein Wert Validieren wird auf einem Tisch dupliziert werden soll behond Rahmen eines ORM. ORM arbeitet daran, die Validierung vorbei für Sie zu behandeln, wenn es thows wirft die Ausnahme und seine bis zu Ihnen entsprechend verhalten.

Lets denken ein wenig über das, was bedeutet es für Sie, um zu validieren ist ein Wert, ein Duplikat auf der Datenbank vor der Ausführung des Einsatzes Befehl sein wird ... 1. Sie erhalten eine SELECT für jede Spalte durchführen müssen, die eine eindeutige Einschränkung haben sie validieren sie bereits den Wert haben, der im Begriff ist, eingesetzt werden. 2. Wenn nicht, führen Sie die INSERT. 3. Wenn ja, eine Ausnahme auslösen? ... dies recht ist, was passiert jetzt ...

Also, lassen Sie es Schlag! :) Nur bereit sein für sie und entsprechend handeln zu blasen (das Speichern innerhalb eines Try / Catch wickeln).

Prost! Alex

Andere Tipps

Ich habe nicht das Problem reproduzieren, so dass ich nicht eine direkte Antwort für Ihr Problem haben, aber ...

Mit Strings als PK ist nicht so eine gute Praxis, warum nicht Sie es mit einem INT Primärschlüssel sowie eine Beschreibung Spalte Varchar? Die Beziehungen zu dieser Tabelle werden viel schneller als Datenbanken Index integer viel schneller als Text sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top