Wie fügt nur neue Datensätze mithilfe von Linq-to-SQL?
Ich haben, fügen Sie einige Daten in regelmäßigen Abständen in meiner SQL-Server-Datenbank. Aber die feeds wo lese ich die Daten erneut einige Daten, die eingefügt wurde, vor. Wenn ich mit Linq-to-SQL zum einfügen in die DB entweder einige Daten dupliziert, oder eine primary key-Verletzung eine Ausnahme ausgelöst wird, abhängig vom Primärschlüssel.
Einfügen der Daten ohne Dopplungen und ohne Ausnahmen? Ich möchte nicht zu vermeiden, die exception mit einem try-catch, denn sobald die Ausnahme ausgelöst wird, der rest der Daten ist nicht eingefügt.
update ich fand auch meine eigene Lösung: ich habe einen doppelten Einträge löschen gespeicherte Prozedur, die ausgeführt wird, direkt nach dem InsertAllOnSubmit + SubmitChanges
InformationsquelleAutor Jader Dias | 2009-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alles, was Sie tun müssen ist, erstellen Sie eine neue Instanz der Klasse und rufen Sie dann InsertOnSumbit() auf dem Tisch:
Die andere Sache, die Sie brauchen, um sicher zu sein, wie du bist Inkrementieren deine ID-Spalte. Im Allgemeinen bin ich immer sicher, dass Sie die IDENTITÄT(1,1) - Einstellung auf meine ID-Spalten. Diese erklärt auf Ihrer LINQ entity-id-Spalte wie folgt:
Um Duplikate zu vermeiden, was Sie wirklich brauchen, ist, was wir nennen, in meinem Geschäft eine "append" - Funktion. IMHO, dies ist meist problemlos mit einer gespeicherten Prozedur - wir haben sogar eine Vorlage, die wir für Sie:
Ist es möglich, es zu tun in linq obwohl, nur Abfrage für eine Liste der vorhandenen IDs (oder was auch immer Spalte, die Sie gerade off-keying):
Die LINQ-Lösung scheint ziemlich langsam. Abfragen einer riesigen Tabelle einen laden der Inhalte im Gedächtnis scheint nicht machbar für mich. Vielleicht sollte ich stick mit dem SP-Ansatz.
Das ist, was ich dachte... Obwohl, man könnte die Geschwindigkeit der LINQ-Lösung bis nur durch die Auswahl der Eigenschaften, die Sie wirklich brauchen... zum Beispiel, nur die ID-Spalte. Auch, wenn Sie wieder verwenden können die "vorhandenen" - Abfrage für mehrere Durchläufe, das wird auch helfen.
InformationsquelleAutor Daniel Schaffer
Leider, es gibt keinen Weg, um es als Linq to SQL nicht überprüfen Sie die Datenbank, bevor Sie das einfügen führt. Der einzige Weg, dies zu tun ist, um die Datenbank abzufragen ersten, um zu bestimmen, wenn der doppelte Eintrag vorhanden ist und dann den Datensatz hinzufügen, wenn es nicht.
Ideal Linq to SQL unterstützen würden, die Doppelte Schlüssel Ignorieren - Eigenschaft auf eine SQL-Spalte. Aber es tut sich leider im moment nicht.
InformationsquelleAutor Keltex