Linq - строка не найдена или изменена

У меня есть следующий код:

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

Глядя на SQL Profiler, создается следующий SQL:

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

Почему мой оператор where не включает "where id =...."???

Что я делаю неправильно?

Мое приложение выдает исключение ChangeConflictException сообщением... "Строка не найдена или изменена"

Ответы

Ответ 1

Убедитесь, что ваша модель соответствует БД. Я столкнулся с этим, если они не синхронизированы, в большинстве случаев флаг с нулевым значением. Ознакомьтесь с этой статьей для возможной причины.

Я предполагаю, что вы используете версию выпуска .net 3.5 (Visual Studio 2008).

Ответ 2

Нашел решение в: http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/c672c8ee-bf2a-41b4-bb8b-aa76cc5d9b95 (опубликовано Тоддом Фленором)

Проблема может быть решена этой ошибкой, перерисовывая таблицу из проводника сервера дизайнеру и перестраивая. Поэтому разработчик не синхронизировался с таблицей SQL...

Ответ 3

У меня была та же проблема и только что удалила таблицу в .dbml файле (дизайнер) и снова удалила из базы данных, а затем построила мое приложение. Он решил мою проблему.