使用Linq更新NVarChar(MAX)列导致错误

本文关键字:错误 MAX Linq 更新 NVarChar 使用 | 更新日期: 2023-09-27 17:59:04

我正在尝试使用C#中的Linq更新数据库中的现有值。

我实例化变量:

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

然后我更新操作列(它是一个NVarChar(MAX)),但我正在检查它是否已经有操作。如果是这样的话,我只需要在上面加一个分号,例如action1;动作2

当我打电话时:

context.SubmitChanges();

我在调试时遇到此错误:

System.NotSupportedException:SQL Server不处理的比较NText、Text、Xml或Image数据类型。

我试过设置UpdateCheck = UpdateCheck.Never,但这并不能解决问题。

编辑:添加我更新操作的代码(变量"action"是一个字符串)

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

使用Linq更新NVarChar(MAX)列导致错误

方法1:

要解决此问题,只需使用xml editor来修复open the dbml file,并按如下方式设置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

我希望这对你有帮助。

在自动检测中,您的DAL类似乎将该属性选为了错误的类型?你能在设计器中手动指定类型为NVARCHAR(MAX),而不是它认为的任何其他类型吗?