【问题标题】:Modifying a column with the 'Identity' pattern is not supported in WCF RIA ServicesWCF RIA 服务不支持使用“身份”模式修改列
【发布时间】:2011-04-02 03:59:41
【问题描述】:

我一直在遵循从 Microsoft 创建您的第一个 WCF RIA 服务应用程序的演练,并在尝试使用数据上下文的 SubmitChanges() 方法编辑和更新数据时遇到了问题。

正在更新的表在 SQL Server 2008 中的“CourseID”列上设置了标识规范。但是,PRIMARY 键是其他两个字段的组合。

当使用 SubmitChanges() 时,应用程序在浏览器中被锁定并呈现一个未处理的异常。通过处理此异常,我设法得到消息:不支持使用“身份”模式修改列。这是指“CourseID”列。

关闭身份规范可以解决问题,但我需要自动递增 ID。以什么方式不支持。或者我哪里错了?

【问题讨论】:

  • 这应该可以工作(虽然我只在 EF 中完成,而不是 RIA 服务),但请确保在 EDMX 中为 CourseID 正确设置了 StoreGeneratedPattern
  • 我在想为什么你会有这样的结构。如果您有一个应该作为您的 PK 的代理键,那么其他两个应该有一个唯一索引是的,但是出于性能原因以及在信息更改时更新信息的困难,复合键对于 PK 来说是一个非常糟糕的选择。
  • @HLGEM 我昨天下班后不久就得出了这个结论。数据库结构是这里的问题。感谢您加强这一想法。我会关闭这个问题。
  • 我们也遇到了这个问题。我认为 EF 没有理由不支持这一点。我们在 Identity 字段上有一个聚集索引来减少/防止表/索引碎片。 EF 当然应该支持不是 PK 的身份字段。

标签: entity-framework sql-server-2008 wcf-ria-services


【解决方案1】:

正如上面的注释所指出的,您需要将 StoreGeneraratedPattern 设置为“Computed”。

虽然您可以在模型设计器上更改此设置,但它会更改 CSDL 中的值。但是,要使其正常工作,还必须在 SSDL 中更改该值。改变这种情况的唯一方法是手动修改 XML。

请记住,诸如“从数据库更新模型”之类的各种内容会重新生成 SSDL...因此您必须重新应用更改。

【讨论】:

  • 此更改手动忽略创建和编辑中的属性,如果此属性具有值“默认值”,如果在编辑中您想要更改该属性的值,则忽略该属性,仍然是值“默认值”编辑后
【解决方案2】:

有解决此问题的方法:将 [RoundtripOriginal] 属性添加到实体元数据类中的相应属性。

查看 Jeff Handley 在此 Silverlight 论坛讨论中的回复:

WCF RIA Bug: Changes include "Identity" column DomainDataSource( "Indentity" column no modify), WCF RIA does not support

【讨论】:

    【解决方案3】:

    这里的数据库结构有问题。

    【讨论】:

    • 你能解释一下为什么数据库结构不对吗?我遇到了同样的问题,但我使用的是 Azure 移动服务自动生成的字段。
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多