2009-07-09 2 views
2

Ich verwende DataSets für den Zugriff auf Sql Server 200x in einem C# -Projekt. In fast allen Tabellen ist es üblich, den Datensatz nicht zu löschen. Stattdessen haben wir ein Feld, das einfach ein wenig dafür hält, ob der Datensatz gelöscht wird. Ich kann jede Tabelle im DataSet manuell bearbeiten und ihren Auswahlbefehl einschließen, wobei Deleted = 0 und der Löschbefehl stattdessen ein Update ist. Dies ist jedoch mühsam.Wie können benutzerdefinierte Befehle in einem DataSet basierend auf der Löschmethode "DELETE" automatisch erstellt werden?

Gibt es eine Möglichkeit, die Methode zu ändern, die VS verwendet, um die Befehle für den Tableadaptor zu generieren, um diese Funktionalität für sie automatisch hinzuzufügen?

Bearbeiten: In der Tat wäre dies eine Art der Anpassung der GenerateDBDirectMethods-Funktionalität.

+0

Ist das "gelöschte" Bitfeld in der Tabelle Sql Server definiert oder wird es nach dem Lesen aus dem DB zum DataSet hinzugefügt? – MusiGenesis

+0

Dieses Feld "Gelöscht" befindet sich im Datenbankschema in SS. – Totty

Antwort

1

Ich denke nicht, dass Sie in der Lage sein werden, dies automatisch mit etwas wie dem SqlCommandBuilder zu generieren.

Stattdessen sollten Sie die Tatsache nutzen, dass die stark typisierten Datasets und Datenadapter im selbst erstellten Code des Datasets partielle Klassen verwenden und Sie daher in der Lage sein sollten, einer partiellen Klasse zusätzliche Logik hinzuzufügen überschreiben Sie die Standardimplementierung.

Zum Beispiel sollten Sie in der Lage sein, die InitCommandCollection-Methode für den generierten Datentabellenadapter zu überschreiben, die Sie dann anstelle des Löschbefehls in Ihr Update isDeleted = 1 einsetzen könnten.

Sie müssen einige intelligente um dieses schreiben, aber es sollte Ihnen helfen. Ich würde empfehlen, dass der Tabellenadapter eine Liste überprüft, um zu sehen, ob der Tabellenname innerhalb der Liste ist, wenn es dann ist, dass Sie mit einer gelöschten Spalte zu tun haben, wenn nicht, dann ist es ein löschbarer Tabellendatensatz.

2

Sie können auf Ihre Daten über Datenbankansichten zugreifen und dort filtern.

Persönlich mag ich SQL-Commands in DataSet-Definitionen nicht.

EDIT:

Es gibt keine eingebaute Möglichkeit diese AFAIK zu tun. Sie können ein VS-Add-In erstellen und es in einem Kontextmenü im Projektmappen-Explorer aufrufen (Rechtsklick auf .xsd) oder DS öffnen und das Add-In aus dem Hauptmenü aufrufen. Das Add-in würde dann xsd analysieren und identifizieren und Text aktualisieren und Korrekturen vornehmen. Wahrscheinlich wäre dies nur direkt nach dem Erzeugen des DS (Drag drop from sql server) nützlich.

Für add.in sehen:

Ich persönlich würde die DB Weg gehen. Erstellen Sie Sichten, die die Filterung für Sie durchführen, und fügen Sie Löschauslöser für diese Sichten hinzu, die eine Aktualisierung statt einer Löschung durchführen würden. Auf diese Weise entfernen Sie die Last, die bei der Anwendung zu tun ist, und machen dies zur Verantwortung der Person, die ein physisches DB-Modell erstellt. Dies würde einmal pro Tabelle durchgeführt werden. Im Gegensatz dazu haben Sie wahrscheinlich mehrere Punkte im Code, die sich mit einzelnen Tabellen befassen (mehrere Datasets, die dieselbe db-Tabelle verwenden).

+0

Wenn Sie den DB-Weg mit Ansichten und Auslöser gehen, würde ich CodeSmith verwenden, um die Ansichten und Auslöser von Ihren "Basistabellen" zu generieren, vorausgesetzt, Sie haben mehr als 1 oder 2 Tabellen. –

1

Ich würde mit einem Werkzeug wie CodeSmith und Erstellen einer benutzerdefinierten Vorlage zum Erstellen Ihrer Datasets statt dann mit dem "Drag + Drop" -Designer betrachten.Das Erstellen einer Vorlage dauert von vornherein länger, bietet jedoch mehr Kontrolle und Wiederholbarkeit als das, was Sie erstellen.

Ansonsten schauen Sie sich eines der besseren ORM-Systeme an und passen Sie das Mapping Ihren Wünschen an.

Verwandte Themen