2013-05-04 17 views
5

Ich habe dies viele Male getan und es hat funktioniert.Aktualisieren eines Datensatzes mit Linq-to-SQL

Jedes Beispiel, das ich gefunden habe, ist genau das, was ich habe ..

ich meine Frage ...

var result = from u in tdc.tblUsers 
      where u.UserID == userID 
      select u; 

und dann ändere ich die Werte ich will:

foreach (tblUsers u in result) 
{ 
    //change values (and no im not changing the primary key or foreign keys) 
} 

dann stelle ich Änderungen

tdc.SubmitChanges(); 

Ich habe versucht, es auch 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 seit UserID der Primärschlüssel ist.

Wenn es Änderungen abschickt, wird die Ausnahme ausgelöst, dass die Zeile nicht gefunden oder geändert wurde. Ich bin die einzige Person, die dies verwendet, so gibt es keine anderen Konflikte mit dem Zugriff auf die Datenbank oder Sperren. Warum sollte es die ChangeConflictException werfen? Ich bin mit dem Debugger durchgegangen und die Daten bleiben den ganzen Prozess durch, einschließlich der Änderungen, die ich versuche zu machen.

+0

Verwenden Sie das Entity Framework (und wenn ja, welche Version)? – gunr2171

+0

Auch haben alle Ihre Tabellen Primärschlüssel. Dies schließt die eine, die Sie bearbeiten, und alle Verzweigungstabellen von Fremdschlüsseln ein. – gunr2171

+0

.NET Framework 4 und ja alle Tabellen haben Primärschlüssel und ordnungsgemäße Fremdschlüssel. Diese Abfrage wird nur nach 1 Tabelle ausgeführt, und diese Tabelle enthält keine Fremdschlüssel. Es ist einer meiner Basistabellen. –

Antwort

6

Sie erhalten diesen Fehler möglicherweise, weil eines Ihrer Felder im Linq To SQL-Designer und in der tatsächlichen Datenbank etwas anderes aufweist.

Oder Sie können auf diesem article

Good Luck einen Blick!

+0

Ich löschte die dbml, aktualisierte Datenquelle und zog alle meine Tabellen wieder ein. Re-ran-Programm und Ausnahme nicht aufgetreten. Vielen Dank. Ich habe früher eine Änderung vergessen, die ich in der Datenbank gemacht habe lol. +1 für Sie –

+0

Ich ging auch. Es sagte mir, ich musste ein paar Minuten warten lol –

2

Vielleicht arbeiten Sie mit anderem Kontext? Versuchen Sie, es mit zu verkapseln.

wie diese

using (myContext ctx = new myContext()) 
{ 
    var user = ctx.users.first(); 
    user.name="blah"; 
    ctx.SubmitChanges(); 
} 
0

Oft, wenn Sie sich bei der aktuellen SQL suchen, die Linq-to-SQL erzeugt, werden Sie sehen, dass es mit Anpassung der Datenbankzeile wirklich übereifrige wird, die Sie anfänglich abgerufen. Stellen Sie sich vor, Sie hätten eine Tabelle mit den Spalten ID (PK), A, B, C. Sie würden denken, dass wenn Sie Spalte C für eine Zeile aktualisieren, es ausreichen sollte, die Zeile mit einem passenden Primärschlüssel zu aktualisieren. Häufig versucht Linq-to-SQL jedoch, auch auf die Spalten A und B zu passen. Normalerweise ist das in Ordnung. Es sei denn, Sie haben gleichzeitige Schreibvorgänge, entweder aus Multithreading oder aus mehreren Prozessen, und etwas anderes ändert Spalte A oder B für den Datensatz, den Sie zu aktualisieren versuchen. Dann erhalten Sie diese System.Data.Linq.ChangeConflictException: Zeile nicht gefunden oder geändert. Fehler, wenn Sie SubmitChanges() für Ihren Datenkontext aufrufen.

Verwandte Themen