我正在使用LINQ-to-SQL在SQL中创建和维护一个表,其中包含发送到另一个应用程序的XML消息及其相应的响应。表中的每一行都包含请求消息或响应消息的详细信息以及关联消息的ID(在响应消息的情况下请求消息的ID,反之亦然)。
这一切都很有效,直到我尝试更新包含请求消息行中相关响应消息的id的列。为此,我使用的形式代码:
using (var MessageStore = new MessageStore(CONNECTION_STRING))
{
// Get the Request message with the specified ID
var Request = MessageStore.XMLMessages.SingleOrDefault(X => X.Id == RequestId);
// Update the row with the ID of the associated response message
if (Request != null)
{
Request.LinkedMessageId = ResponseId;
MessageStore.SubmitChanges();
}
}
但是,SubmitChanges调用会抛出异常:
SQL Server does not handle comparison of NText, Text, Xml, or Image data types.
看起来,SQL正在将更新消息中的XML数据与原始数据进行比较,但我不需要这样做。有没有办法只更新行中的其他一些列而不用SQL来比较XML数据?我尝试使用匿名类型,但这些是只读的,因此我无法更新值然后存储它。
任何建议将不胜感激。
在发布问题后约5分钟找到答案!诀窍是在关联的属性上将UpdateCheck设置为Never
[Column(DbType = "Xml NOT NULL", CanBeNull = false, UpdateCheck = UpdateCheck.Never)]
public XElement MessageText { get; set; }