2009-05-15 7 views
11

Linqオブジェクトの更新をしようとすると、次のエラーが表示されます。Linq to SQLエラーSQLはNText、Text、Xml、またはImageを比較しませんか?

"SQL ServerはNText、Text、Xml、またはImageデータ型の比較を処理しません。"

データベースには、32KBの文字列を保持するため、テキストフィールドがあります。

データ型を変更する必要がありますか、Linqで使用できる回避策がありますか?

EDIT

は、私はそれがテキストフィールドである理由であるサポートSQL 2000を持っています。

答えて

7

これをVARCHAR(max)に変更すると、それはもっと簡単になります。


EDIT

SQL 2000は、あなたが、あなたのテキスト欄に「検索」できるようになる場合は、フルテキストインデックスは、ここではわからないが、あなたを助けるかもしれない

+0

サポートする必要があるSQL 2000の場合はどうなりますか? –

+0

カラムのタイプを変更できない場合はどうなりますか?私はまだUpdateCheck = UpdateCheck.Never問題の列(NText型)のためにこの例外が発生しています。その他のソリューション?データを更新するときにのみ発生します。フィールドが更新前にnullだった場合、コードは正常に実行されます。ありがとう。デビッド。 –

+0

全文索引付けでは、さまざまな全文述語「CONTAINS」などしか使用できません。MSSQL 2kでは、これらのタイプの列を '='、 '!='などと比較することはできません。 – Donnie

8

あなたは常に上のToString()を使用することができます問題の文字列はクライアント側の比較を強制します。

+0

これは正しい方法です.... – RameshVel

+0

私の場合、XMLデータ型フィールドがあり、モデルの列のupdateCheck属性を変更することでエラーを解決できました。[Column(Storage = "_CustomAttributes"、AutoSync = AutoSync.OnInsert、 DbType = "xml"、UpdateCheck = UpdateCheck.Never)] – ZimSystem

1

手動で更新チェックを.dbmlで "Never"に変更することができます。

+1

関連ビットを含めて具体的にしてください。 – NeverHopeless

1

それとも、コード内でUpdateCheckを設定できます

 [Column(Name = "SomeXml", Storage = "_someXml", CanBeNull = true, UpdateCheck = UpdateCheck.Never)] 
    public System.Xml.Linq.XDocument SomeXml { get { return _someXml; } set { _someXml = value; } } 
0

あなたはNVARCHAR(MAX)にテーブルのALLフィールドを変更する必要があります - あなたが更新しないものも含め。

関連する問題