2009-09-22 5 views
9

Entschuldigung im Voraus, denn das ist keine Frage, sondern eine Lösung - aber es dauerte eine Menge Suche, um die Antwort zu finden und Google war nicht viel Hilfe, also Ich wollte der Community etwas zurückgeben, indem ich den Fehler und die Lösung bereitstelle, um zukünftigen Googlern zu helfen.LINQ Probleme mit NText, Text und Image auf SQL-Server

Bei der Verwendung von LINQ to SQL, lief ich ein Problem beim Senden von Änderungen (das zweite Mal) an eine Datentabelle. Das erste Mal, dass ich einreichen Änderungen alles ist in Ordnung, das zweite Mal, ich einreichen Änderungen ich eine SQL-Ausnahme empfangen, die sagte:

"The text, ntext, and image data types cannot be compared or sorted, 
except when using IS NULL or LIKE operator" 

Die Ausnahme geworfen wurde, als ich SubmitChanges() aufgerufen wird, sondern wegen der verzögertes Laden von LINQ ist tatsächlich in der vorherigen Zeile aufgetreten, als ich Refresh (RefreshMode.KeepCurrentValues, myObject) aufgerufen habe.

Antwort

10

Das Problem besteht darin, dass der Aktualisierungsmodus versucht, den aktuellen mit der Datenbankversion aller Felder zu vergleichen, und SQL unterstützt diese Art von Vergleichstext, Ntext und Image-Spalten nicht (zumindest nicht in SQL Server 2000)).

Die Lösung ist das folgende Attribut auf Ihre Spaltendefinition

UpdateCheck = UpdateCheck.Never 

zum Beispiel hinzufügen

[Column(DbType = "NText", CanBeNull = true, UpdateCheck = UpdateCheck.Never)] 

Dann funktioniert der Refresh-Modus OK und SubmitChanges hat keine weiteren Probleme.

+1

oder wenn Sie auf SQL Server 2005 und höher sind, diese Datentypen zurücklassen und nie zurückschauen - verwenden Sie (N) VARCHAR (MAX) anstelle von (N) TEXT und VARBINARY (MAX) anstelle von IMAGE –

+0

wie ich es sehne, alles auf Sql Server 2005 upgraden zu können (oder sogar etwas moderneres!). Leider immer noch auf Sql Server 2000 für die absehbare Zukunft! –

+0

Wie Sie Ihr eigenes Problem behoben haben, sollten Sie dies als die Antwort markieren. –