【问题标题】:WCF Service complains about columns marked as rowversionWCF 服务抱怨标记为 rowversion 的列
【发布时间】:2009-11-11 22:04:31
【问题描述】:

我目前正在玩 Silverlight3、C# 和 LinqToSQL。 我在 SQLExpress 服务器上建立了一个数据库,其中包含一些表,例如:

员工(Id、姓名、DepartmentId、TimeStamp) 部门(ID、名称、时间戳)

Id 字段是 VarChar(50),Name 字段是 VarChar(100),TimeStamp 字段是时间戳类型。

在我的 Silverlight 解决方案中,我有两个项目: 一个服务器端,它包括一个表示数据库的 LinqToSQL 模型和一个 WCFService,其中包括通过 linq 查询来查询对象的方法,这使得第二个项目可以访问数据。 第二个项目是一个简单的 Silverlight 应用程序,它应该从服务中获取结果并将它们显示在页面上。

这些查询对于某些对象是可以的,但其他查询会引发操作异常(甚至在查询被执行之前),它会显示以下内容: 元素“Byte[] TimeStamp”和“System.String Id”都被标记为rowversion。

我已经仔细检查了所有内容,甚至从设计器中删除了这些表并再次添加它们,但没有运气,我不断收到这些错误。这些表几乎完全相同,但不知何故,这个错误只会引发其中一些,而另一些则很好。 TimeStamp 列是 Byte[] 类型,而 Id 列在 LinqToSQL 模型中具有 System.String 类型。但只有 TimeStamp 被标记为时间戳,并且对其服务器数据类型声明为 rowversion NOT NULL。另一方面,Id 列没有设置任何值,这让我猜测为什么会引发有关此 rowversion 冲突的错误。 有什么建议可能导致这种冲突吗?

【问题讨论】:

  • 在设计中,当你进入表属性时,你能确保ID列没有作为rowversions吗?
  • 你是对的 我总是和设计器一起编辑 dbml 文件(LinqToSQL 模型),那里的属性显示为 disabled/false 我然后将它们设置为 true 并返回 false 以确保它们被禁用但是仍然是同样的问题。然后我很沮丧,用文本编辑器打开了 dbml 文件。瞧,某些标签中有 IsVersion="true" 属性导致了所有麻烦。设计师没有展示它们,所以在手动移除它们之后,现在一切都运行良好:)。 (可能是 Visual Studio 2008 中的一个错误?)

标签: .net linq wcf silverlight linq-to-sql


【解决方案1】:

使用文本编辑器打开 .dbml 文件并删除有问题的 Id 节点中的所有 IsVersion="true" 属性解决了问题。 即使在设计器中启用和禁用这些属性后,Visual Studio 2008 DBML 设计器也没有将这些属性显示为启用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多