2008-12-02 17 views
7

Ich brauche Einträge in eine Tabelle, die keinen Primärschlüssel mit LINQ to SQL enthält. Der Tisch ist schlecht gestaltet; Ich habe KEINE Kontrolle über die Tabellenstruktur. Die Tabelle besteht aus einigen Varchar-Feldern, einem Textfeld und einem Zeitstempel. Es wird als Audit-Trail für andere Entitäten verwendet.Linq einfügen ohne Primärschlüssel

Was ist der beste Weg, um die Einsätze zu erreichen? Könnte ich die Linq-Partialklasse für diese Tabelle erweitern und einen "falschen" Schlüssel hinzufügen? Ich bin offen für jeden Hack, aber kludsey.

Antwort

11

LINQ to SQL ist nicht für diese Aufgabe gedacht, also verwenden Sie es nicht. Verwerfen Sie die Einfügung einfach in eine gespeicherte Prozedur und fügen Sie die Prozedur zu Ihrem Datenmodell hinzu. Wenn Sie das nicht können, schreiben Sie eine normale Funktion mit ein wenig Inline-SQL.

9

Öffnen Sie Ihre DBML-Datei im Designer und geben Sie der Zuordnung einen Schlüssel, unabhängig davon, ob Ihre Datenbank einen enthält oder nicht. Dies wird dein Problem lösen. Beachten Sie jedoch, dass Sie nicht darauf vertrauen können, dass die Spalte für die Identität oder irgendetwas anderes verwendet wird, wenn in der Datenbank kein echter Schlüssel vorhanden ist.

2

Sie können die Methode DataContext.ExecuteCommand verwenden, um Ihre eigene benutzerdefinierte INSERT-Anweisung auszuführen.

Oder Sie können eine primary key zu einer Spalte hinzufügen, dies wird die objects to be tracked für Einfügungen/Updates/Löschungen durch den Datenkontext zulassen. Dies funktioniert auch, wenn die Spalte nicht wirklich ein erzwungener Primärschlüssel in der Datenbank ist (wie würde linq das wissen?). Wenn Sie nur Einfügungen durchführen und niemals einen Primärschlüsselwert im selben Datenkontext verwenden, ist alles in Ordnung.

3

Ich konnte dies mit einem zusammengesetzten Schlüssel umgehen.

Ich hatte ein ähnliches Problem mit einer Tabelle, die nur zwei Spalten enthält: Benutzername, Rolle. Diese Tabelle benötigt offensichtlich keine Identitätsspalte. Also, ich habe einen zusammengesetzten Schlüssel mit Benutzernamen und Rolle erstellt. Dadurch konnte ich LINQ zum Hinzufügen und Löschen von Einträgen verwenden.

Verwandte Themen