3

C# で Linq を使用して、データベース内の既存の値を更新しようとしています。

変数をインスタンス化します。

var projectTrackingEntity = context.project_trackings.Single(pt => pt.project_id == projectId);

次に、アクション列を更新します(これはですNVarChar(MAX))が、すでにアクションがあるかどうかを確認しています。もしそうなら、私はそれにセミコロンを追加するだけです。アクション1;アクション2

私が電話するとき:

context.SubmitChanges();

デバッグ中に次のエラーが発生します。

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

を設定UpdateCheck = UpdateCheck.Neverしてみましたが、問題は解決しません。

編集:アクションを更新するコードを追加します(変数「アクション」は文字列です)

var actions = projectTrackingEntity.action.Split(';');
bool equalActions = false;
foreach (string a in actions)
{
    if (string.Equals(a, action, StringComparison.CurrentCultureIgnoreCase))
    {
        equalActions = true;
        break;
    }
}
if(!equalActions)
{
    projectTrackingEntity.action = string.IsNullOrEmpty(projectTrackingEntity.action) ? //if
        action : //true
        projectTrackingEntity.action + ';' + action; //false
}

context.SubmitChanges();
4

2 に答える 2

3

方法1:

この問題を修正するには、次のようopen the dbml filexml editor設定updatecheck to Neverします。

<column canbenull="true" dbtype="Xml" name="PermissionsXml" type="System.Xml.Linq.XElement" updatecheck="Never"></column>  

方法2:

フィールドをに変更しますVARCHAR(max)

方法3:

UpdateCheckをに変更しますUpdateCheck.WhenChanged

これがお役に立てば幸いです。

于 2013-02-14T17:44:27.130 に答える
0

あなたの DAL クラスは、自動検出で間違ったタイプとしてプロパティを取得したように見えますか? NVARCHAR(MAX)タイプが他のタイプではなく、デザイナにあることを手動で指定できますか?

于 2013-02-14T20:51:09.340 に答える