2009-02-03 5 views
15

Mam następujący kod:LINQ - nie Row znaleziony lub zmienione

 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(); 

Patrząc na SQL Profiler następujące SQL jest generowany:

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

Dlaczego mój gdzie oświadczenie nie obejmują "where id = ...." ???

Co robię źle?

Moja aplikacja generuje ChangeConflictException z komunikatem ... „wiersz nie znaleziono lub zmienione”

+0

Musimy zobaczyć kod przed tym ... jak/kiedy tworzony jest twój datacontext? Gdzie można ustawić imageMetaData.ID? –

+2

Czy na tym stole są jakieś wyzwalacze? – BFree

Odpowiedz

38

Upewnić się dany model pasuje do DB. Przekradłem się, jeśli nie są zsynchronizowane, w większości przypadków flaga nullable. Sprawdź tę article dla możliwej przyczyny.

Zakładam, że korzystasz z wersji .net 3.5 (Visual Studio 2008).

+2

Dzięki, był to prosty problem, który nie został ustawiony. Musi mieć lepszy sposób na utrzymanie zsynchronizowanych baz danych! –

+0

Jeśli schemat jest prosty, należy rozważyć utworzenie schematu DB z DBML. To sprawia, że ​​DBML jest źródłem prawdy. –

1

Znaleziono rozwiązanie w: http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/c672c8ee-bf2a-41b4-bb8b-aa76cc5d9b95 (Wysłany przez Todda Fleenor)

Problem można rozwiązać ten problem przez redragging tabelę z eksploratora serwera do projektanta i odbudowy. Tak więc projektant był niezsynchronizowany z tabelą SQL ...

+0

Pracowałem dla mnie. Najlepszym sposobem rozwiązania tej sytuacji jest utworzenie nowego pliku linq do sql, przeciągnięcie i upuszczenie tabel, a następnie skopiowanie wynikowego XML – madoke

0

Miałem ten sam problem i po prostu skasowałem tabelę w pliku .dbml (projektant) i ponownie upuściłem ją z bazy danych, a następnie zbudowałem swoją aplikację. Rozwiązał mój problem.