【问题标题】:Problem with Updating an Entity with a Timestamp Column via WCF通过 WCF 更新带有时间戳列的实体的问题
【发布时间】:2009-12-07 17:03:49
【问题描述】:

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

如果我们尝试不使用 WCF 的相同更新,它工作正常。所以问题一定出在WCF上。我们在 Timestamp 属性上有适当的 [DataMember] 属性以进行序列化。有人知道问题可能是什么吗?

感谢您的帮助。

兰迪

【问题讨论】:

    标签: wcf linq-to-sql


    【解决方案1】:

    这个问题与 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 想要将具有新值的新实体添加到数据库中的时间戳列的效果......

    【讨论】:

    • 是的,它确实是 Timestamp 数据类型。而且我相信这是一个 WCF 问题,因为不使用 WCF 时更新工作正常。此外,L2S 知道不要尝试在 SQL Server 中更新此列,因为它被标记为自动生成值。
    • 好吧,那么你的代码肯定有问题,它试图从你的 WCF 服务更新 L2S 实体 - 你能告诉我们那个代码吗??
    猜你喜欢
    • 2021-11-03
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多