在SQL服务器上,使用LINQ处理NText、Text和Image出现问题

9
抱歉事先说明,这不是一个问题而是解决方案-但我花了很多时间搜索才找到答案,谷歌也没有太大帮助,所以我想通过提供错误和解决方案来回馈社区,以帮助未来的谷歌用户。
在使用LINQ to SQL时,当向数据表提交更改(第二次)时,我遇到了一个问题。 第一次提交更改时一切正常,第二次提交更改时我收到了一个SQL异常,其中说:
"The text, ntext, and image data types cannot be compared or sorted, 
 except when using IS NULL or LIKE operator"

当我调用SubmitChanges()时,抛出了异常,但由于LINQ的惰性加载,实际上是在前一行调用Refresh(RefreshMode.KeepCurrentValues, myObject)时引发的异常。

1个回答

10
问题在于“刷新”模式试图比较所有字段的当前版本和数据库版本,而SQL不支持那种文本、ntext和image列的比较(至少在SQL Server 2000上不支持)。
解决办法是在列定义中添加以下属性。
UpdateCheck = UpdateCheck.Never

e.g.

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

然后刷新模式可以正常工作,而且SubmitChanges没有任何进一步的问题。


1
如果您使用的是SQL Server 2005或更高版本,那么请放弃使用那些数据类型,不要再回头看它们了 - 使用(N)VARCHAR(MAX)代替(N)TEXT,使用VARBINARY(MAX)代替IMAGE。 - marc_s
啊,我多么希望能够升级所有东西到 Sql Server 2005(甚至更现代的版本!)。不幸的是,未来可预见仍将被困在 Sql Server 2000 上! - Alex White
由于您已经解决了自己的问题,您应该将其标记为答案。 - Ryan Versaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接