Aktualisieren eines Datensatzes die Verwendung von Linq-to-SQL
Ich habe das oft getan und es hat funktioniert.
Jedes Beispiel, das ich gefunden habe, ist genau das, was ich habe..
Mache ich meine Abfrage...
var result = from u in tdc.tblUsers
where u.UserID == userID
select u;
und dann ändere ich die Werte, die ich möchte:
foreach (tblUsers u in result)
{
//change values (and no im not changing the primary key or foreign keys)
}
dann reiche ich die änderungen
tdc.SubmitChanges();
Habe ich auch schon versucht, es auf diese Weise vor und bekam den gleichen Fehler
tblUsers result = (from u in tdc.tblUsers
where u.UserID == userID
select u).Single();
result.Address = address;
result.Phone = phone;
tdc.SubmitChanges();
Es wird immer nur abrufen 1 Datensatz mit dieser Abfrage, da UserID
ist der Primärschlüssel.
Wenn Sie auf änderungen Einreichen, wirft Ausnahme, dass die Zeile wurde nicht gefunden oder wurde geändert. Ich bin die einzige person mit dieser, so gibt es keine anderen Konflikte mit Zugriff auf die db oder sperren. Warum würden Sie werfen den ChangeConflictException
? Ich trat durch mit debugger und die Daten weiterhin den ganzen Weg durch den Prozess, einschließlich der änderungen, die ich versuche zu machen.
- Sind Sie mit dem Entity Framework (und wenn ja, welche version)?
- Auch ALLE deine Tabellen Primärschlüssel. Dies beinhaltet, die Sie gerade Bearbeiten, und jede Verzweigung Tabellen von fremden Schlüsseln.
- Sie erhalten diese Fehlermeldung möglicherweise, weil eines Ihrer Felder hat etwas anderes in der Linq To SQL designer und in die aktuelle Datenbank.
- .NET Framework 4 und ja, alle Tabellen haben Primärschlüssel und der richtige Fremdschlüssel. Diese Abfrage ist nur noch nach Tabelle 1 und die Tabelle nicht über alle Fremdschlüssel in es. Es ist einer meiner base-Tabellen.
- Irgendeinem Grund Sie mit
SubmitChanges
stattSaveChanges
? Auch, welche version des Entity - framework verwenden Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht Sie arbeiten mit verschiedenen Rahmen? Versuchen, um es zu Kapseln mit.
wie diese
Ziemlich oft, wenn man sich die tatsächlichen SQL, Linq-to-SQL generiert wird, werden Sie sehen, dass es ist wirklich über-eifrigen entsprechenden Datenbank-Zeile, die Sie zunächst abgerufen wird. Stell dir vor, du hast eine Tabelle mit den Spalten ID(PK), A, B, C. Sie würden denken, dass, wenn Sie aktualisiert die Spalte C eine Zeile, es sollte ausreichen, die Zeile zu aktualisieren, mit einem entsprechenden Primärschlüssel. Aber was oft passiert ist, dass Linq-to-SQL wird auch versucht, in den Spalten A und B wie gut. Normalerweise, ist das in Ordnung. Es sei denn, Sie haben gleichzeitige schreibt, entweder von der multi-threading-oder multi-Prozesse, und etwas anderes ändert, Spalte A oder B für den Datensatz, den Sie aktualisieren möchten. Dann erhalten Sie mit diesen System.Daten.Linq -.ChangeConflictException: Zeile nicht gefunden oder geändert werden. Fehler beim Aufruf SubmitChanges() Ihre Daten im Kontext.