代码之家  ›  专栏  ›  技术社区  ›  phoenixh

WCF服务抱怨标记为rowversion的列

  •  0
  • phoenixh  · 技术社区  · 16 年前

    我目前正在与Silverlight 3、C和LinqToSQL一起玩。 我在sqlexpress服务器上构建了一个数据库,其中包含一些表,例如:

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

    ID字段是varchar(50),名称字段是varchar(100),时间戳字段是timestamp类型。

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

    这些查询对于某些对象是可以的,其他查询则会出现操作异常(甚至在执行查询之前),这表示: 元素“byte[]timestamp”和“system.string id”都标记为rowversion。

    我已经仔细检查了所有内容,甚至从设计器中删除了这些表,并再次添加它们,但运气不好,我一直都会收到这些错误。这些表几乎都是相同的,但不知何故,这个错误只会对其中一些表产生影响,而其他表则很好。 timestamp列的类型为byte[],而id列的linqtosql模型中的类型为system.string。但只有时间戳标记为时间戳,并且对于其服务器数据类型声明为rowversion而不是NULL。另一方面,ID列没有设置任何值,这使我猜测为什么会引发与rowversion冲突相关的错误。 有什么建议可能导致冲突吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   phoenixh    16 年前

    用textEditor打开.dbml文件并删除有问题的id节点中的所有isversion=“true”属性解决了这个问题。 Visual Studio 2008 DBML设计器即使在设计器中启用和取消这些属性,也没有将它们显示为已启用。