2009-02-03 6 views
15

Ich habe den folgenden Code:Linq - Zeile nicht oder geändert gefunden

 Guid id = imageMetaData.ID; 

     Data.LinqToSQL.Image dbImage = DBContext.Images.Where(x => x.ID == id).SingleOrDefault(); 

     dbImage.width = imageMetaData.Width; 
     dbImage.height = imageMetaData.Height; 

     DBContext.SubmitChanges(); 

in SQL Profiler, die folgende SQL erzeugt wird:

exec sp_executesql N'UPDATE [dbo].[Images] 
SET [height] = @p0, [width] = @p1 
WHERE 0 = 1',N'@p0 int,@p1 int',@p0=603,@p1=365 

Warum nicht, wo Aussage nicht enthalten "wo id = ...." ???

Was mache ich falsch?

Meine Anwendung wirft einen ChangeConflictException mit der Meldung ... „Zeile nicht gefunden oder geändert“

+0

Wir müssten den Code vorher sehen ... wie/wann wird Ihr Datenkontext instanziiert? Wo wird imageMetaData.ID festgelegt? –

+2

Haben Sie Trigger auf diesem Tisch? – BFree

Antwort

38

Überprüfen Sie, ob Ihr Modell der DB übereinstimmt. Ich bin darüber gestolpert, wenn sie nicht synchron sind, in den meisten Fällen die NULL-fähige Flagge. Überprüfen Sie diese article für eine mögliche Ursache.

Ich nehme an, dass Sie die Release-Version von .net 3.5 (Visual Studio 2008) verwenden.

+2

Danke, war nur ein einfaches Null nicht gesetzt Problem. Muss einen besseren Weg haben, db's synchron zu halten! –

+0

Wenn das Schema einfach ist, sollten Sie das DB-Schema aus der DBML erstellen. Dies macht die DBML zur Quelle der Wahrheit. –

1

fand die Lösung in: http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/c672c8ee-bf2a-41b4-bb8b-aa76cc5d9b95 (geschrieben von Todd Fleenor)

Das Problem wird durch redragging die Tabelle aus dem Server-Explorer auf den Designer und den Wiederaufbau dieser Fehler behoben werden können. Also der Designer war nicht synchron mit der SQL-Tabelle ...

+0

Arbeitete für mich. Der beste Weg, um die Situation zu lösen, besteht darin, eine neue linq-to-sql-Datei zu erstellen, die Tabellen per Drag & Drop zu ziehen und dann das resultierende XML zu kopieren – madoke

0

Ich hatte das gleiche Problem und löschte nur Tabelle in. DBML-Datei (Designer) und wieder aus der Datenbank gelöscht, dann baute meine Anwendung. Es hat mein Problem gelöst.