Ich muss Datensätze in eine Tabelle einfügen, 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.
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 klugdy.
LINQ to SQL ist nicht für diese Aufgabe gedacht, also benutze 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.
Ö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.
Ich konnte das 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 Benutzername und Rolle erstellt. Dadurch konnte ich LINQ zum Hinzufügen und Löschen von Einträgen verwenden.
Sie können die Methode DataContext.ExecuteCommand verwenden Führen Sie Ihre eigene benutzerdefinierte Einfügeanweisung aus.
Oder Sie können einen Primärschlüssel zu einer Spalte hinzufügen, damit < a href="http://msdn.microsoft.com/de-de/library/bb399376.aspx"> zu verfolgende Objekte für Einfügungen / Aktualisierungen / Löschungen durch den Datenkontext. 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.
Tags und Links linq linq-to-sql