Почему Linq to Sql не может отправить изменения для обновлений, несмотря на данные в наборе изменений - PullRequest
3 голосов
/ 15 июня 2010

Я обновляю набор объектов, но обновление завершается с ошибкой SqlException, которая говорит «Неверный синтаксис рядом с« Где »».

Итак, я открываю SqlProfiler, и вот сгенерированный SQL:

exec sp_executesql N'UPDATE [dbo].[Addresses]
SET 
WHERE ([AddressID] = @p0) AND ([StreetAddress] = @p1) AND ([StreetAddress2] = @p2) AND     ([City] = @p3) AND ([State] = @p4) AND ([ZipCode] = @p5) AND ([CoordinateID] = @p6) AND ([CoordinateSourceID] IS NULL) AND ([CreatedDate] = @p7) AND ([Country] = @p8) AND (NOT ([IsDeleted] = 1)) AND (NOT ([IsNonSACOGZip] = 1))',N'@p0 uniqueidentifier,@p1 varchar(15),@p2 varchar(8000),@p3 varchar(10),@p4 varchar(2),@p5 varchar(5),@p6 uniqueidentifier,@p7 datetime,@p8 varchar(2)',@p0='92550F32-D921-4B71-9622-6F1EC6123FB1',@p1='125 Main Street',@p2='',@p3='Sacramento',@p4='CA',@p5='95864',@p6='725E7939-AEE3-4EF9-A033-7507579B69DF',@p7='2010-06-15 14:07:51.0100000',@p8='US'

Конечно, нет заданного утверждения.

Я также вызвал context.GetChangeSet () и правильные значения находятся в разделе обновлений.

Кроме того, я проверил файл .dbml, и все свойства проверки обновлений имеют значения «Всегда».

Я полностью сбит с толку этим, какая-нибудь помощь?

1 Ответ

1 голос
/ 16 июня 2010

Я переопределил GetHashCode, чтобы вернуть объединение нескольких полей. Когда я изменил его, чтобы он возвращал только хэш первичного ключа, это сработало.

Основная причина заключается в том, что обновления не будут выполнены для объекта, чей хеш-код изменяется в течение его жизненного цикла, поэтому при переопределении GetHashCode вам нужно выбрать атрибуты, которые не могут быть обновлены, например, первичный ключ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...