2009-12-07 56 views
0

我们试图通过WCF更新实体,并且实体包含Timestamp列。当我们尝试更新时,我们得到以下Data.Linq错误,“由数据库计算或生成的成员无法更改。”此消息指的是Timestamp列。通过WCF使用时间戳列更新实体的问题

如果我们尝试使用不使用WCF的相同更新,它可以正常工作。所以这个问题必须在WCF中。对于序列化,我们在Timestamp属性上有适当的[DataMember]属性。任何人都有任何想法可能是什么问题?

感谢您的帮助。

兰迪

回答

0

这个问题与WCF无关,真的。

它真的是SQL Server TIMESTAMP数据类型??

您无法更新这些 - SQL Server将自动更新这些字段,每当发生该行发生。

请参阅这里“Timestamps vs. Datetime data types”或这里“Misunderstanding timestamp”了解更多详情。

在接收到WCF消息时,如何处理Linq-to-SQL数据的更新?你能告诉我们一些代码吗?

例如:该字段/属性定义为数据合同上的只读属性?任何人试图更新该值真的没有意义...。

另外,由于您通过WCF发送实体,因此这些实体将是Linq-to-SQL的“断开”实体,例如,在任何时候都不在DataContext范围内的实体。这可能会导致Linq-to-SQL想要为数据库的时间戳列添加一个新值的新实体。

+0

是的,它确实是一个Timestamp数据类型。我相信这是一个WCF问题,因为在不使用WCF时更新可以正常工作。此外,L2S知道不会尝试更新SQL Server中的此列,因为它标记为“自动生成的值”。 – 2009-12-07 17:17:17

+0

那么,那么你的代码中的某些东西一定是错的,它会试图从你的WCF服务中更新L2S实体 - 你能告诉我们代码吗? – 2009-12-07 17:22:49