Linq To Sql und identity_insert
Ich versuche zu tun, record-inserts auf eine Tabelle, wobei der Primärschlüssel ist ein Identity
Feld.
Habe ich versucht, Sie anzurufen
mycontext.ExecuteCommand("SET identity_insert myTable ON")
aber diese tun nicht gut.
Bekomme ich eine Fehlermeldung IDENTITY_INSERT
ist OFF
wenn ich änderungen Einreichen.
Wie kann ich es ON
aus der C# - code, bevor ich änderungen Einreichen?
BEARBEITEN
Habe ich gelesen, dass dies ist, weil die ExecuteCommand - code wird ausgeführt in einer anderen Sitzung.
EDIT 2
Gibt es eine Möglichkeit, die ich ausführen kann, einige DDL entfernen Sie die Identität Spezifikation aus meinem C# - code, gehen die Einsätze, und drehen Sie dann die Identität Spezifikation wieder auf?
Es ist nicht die Produktion-Datenbank. Ich mache eine überweisung an eine Entwicklung Datenbank.
InformationsquelleAutor Ronnie Overby | 2009-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie alles tun, die Schritte in einem einzigen T-SQL code block - das wird wirklich schwer, wenn nicht unmöglich, wenn Sie aktivieren möchten, dann führen Sie Ihre LINQ-to-SQL-Abfrage, und dann schalten Sie es wieder aus 🙁
Die einzige wirkliche Lösung, die ich sehe, ist, zu Verpacken, die die gesamte SQL in einer SQL-Anweisung und Ausführung:
und führen Sie diese als eine einzige code-block mit
.ExecuteContext()
Marc
PS: zu deinem EDIT#2 : Nein, leider gibt es keine (einfache) Möglichkeit zu entfernen, die Identität, die aus einer Spalte, und schalten Sie es wieder auf. Basicall müssten Sie eine neue Spalte erstellen, ohne die IDENTITÄT, kopieren die Werte, löschen Sie die IDENTITY-Spalte, und führen Sie dann das gleiche rückwärts, wenn du fertig bist - sorry! 🙁
PS #2: das ist wirklich wirft die Frage auf: was auf der Erde tun, tun müssen, ein "identity insert"? Auf einer regelmäßigen basis, aus einer app? Zugegeben - Sie vielleicht in diesem müssen einmal in eine Weile, aber ich würde das immer getrennt, im SQL Mgmt Studio - sicherlich nicht in meinem app..... (einfach nur neugierig, was Ihre use-case - /motivation).
+1 für die Frage "warum?"
Ich habe nie gesagt, es war für einen regulären basis. Bin ich der übertragung/Umwandlung von Daten und ich weiß nicht, eine verdammte Ding über SSIS.
OK, in diesem Fall, warum nicht tun Sie es einfach, mit geraden SQL dann? Ja - Linq-wäre schön - wenn es aber ein "one-off" - legen Sie einfach auf plain-SQL und vermeiden Sie all die Probleme und Einschränkungen 🙂
Entweder direkt SQL in Ihrer app, oder gehen Sie mit dem SSIS - das ist wirklich SSIS ist der ganze Grund, - extrahieren-transformieren-laden von Daten von einer Quelle zur anderen 🙂
InformationsquelleAutor marc_s
Andere Möglichkeit ist, wickeln Sie alle Ihre Linq2Sql Anrufe in ein TransactionScope(). Dies sollte Sie zu zwingen, alle laufen in die gleiche Verbindung.
Obwohl, wenn Sie versuchen, etwas zu tun:
führen Sie wahrscheinlich in anderen Fragen, vor allem wenn die identity-Spalte hat, die IsDbGenerated-Attribut auf true festgelegt. Der SQL-Befehl generiert Linq2Sql nicht wissen, "identity" - Spalte und Wert.
Dies ist die freaking Lösung! So ist es möglich!
InformationsquelleAutor John Allers
Sollte es genug sein, um die Verbindung zu öffnen manuell vor dem ausführen von Befehlen. Dies macht die Befehle in der gleichen Sitzung ausgeführt:
InformationsquelleAutor Josef Bláha
Was ich getan habe, ist so etwas wie dieses(Nbuider wird verwendet, um Entitäten erstellen). Ich erstelle alle Zeilen mit Ausnahme von der Regel der Identität Zeile einfügen, die getan am Ende. Dies ist Testdaten-Erstellung daher die Transaktion nicht notwendig war.
InformationsquelleAutor Blue Clouds
Ich hatte die gleiche Fehlermeldung. Und ich löse es, indem Sie die Eigenschaften der Primärschlüssel in der Tabelle.
Den property-Einstellungen "MyId" (in der dbml)
InformationsquelleAutor user1531040
einfach
reseed identity key
(mit custom id) jedes mal, wenn Sie neuen Datensatz hinzufügen, zB:InformationsquelleAutor anht31