【问题标题】:Breeze "Unable to update the value of concurrency property before saving" errorBreeze“保存前无法更新并发属性的值”错误
【发布时间】:2014-04-29 02:15:08
【问题描述】:

我是 Breeze 的新手,在我的第一个项目中,我遇到了“无法在保存之前更新并发属性的值”错误。到目前为止,我已经“创建”和“读取”部分工作但无法“更新”。我看到了这个SO question,但我不确定在哪里可以解决这个问题。

我的设置是 SQL 服务器 (11.0.3128.0) 通过 Lightswitch Odata 服务访问数据库到 Breeze,然后是 Angular。

我从哪里开始?这是 SQL 服务器问题、Breeze 问题还是我的编程错误?当出现此错误时,我只是在使用修改后的实体进行 em.saveChanges() 调用。错误报告一个尚未修改的字段,但它可能是第一个字段(?)。

编辑----------------

因为模型是由 Lightswitch 自动生成的,所以我无法访问代码,但这里是引发错误的字段 (FName) 的元数据。

<Property Name="FName" Type="Edm.String" Nullable="false" MaxLength="50" ConcurrencyMode="Fixed" xmlns="http://schemas.microsoft.com/ado/2008/09/edm" />

编辑 2___________________

默认情况下,Lightswitch 在所有字段上自动将并发模式设置为“固定”,我看不到更改或不设置它的方法。问题是 Lightswitch 元数据将这些字段显示为并发属性字段,即使它们不应该如此。

因此,除非可以更改 Breeze 代码,否则我看不到使用 Lightswitch Odata 服务进行更新或删除的方法。

【问题讨论】:

    标签: sql angularjs breeze visual-studio-lightswitch


    【解决方案1】:

    这可能是模型的问题。正如代码中的注释所说,布尔、字符串和字节的数据类型不应定义为并发列。

    如果有问题的字段是并发属性,请确保它不是这些数据类型之一。

    如果它不是并发属性,也许您可​​以发布一个代码 sn-p,说明您是如何定义模型的。

    编辑:

    如果由于任何原因您无法更改模型,则可以通过实施此 hack 绕过 Breeze 的并发检查:

    entityManager.metadataStore.getEntityTypes()
     .forEach(function(entityType) { 
         entityType.concurrencyProperties = [];
    });
    

    请注意,通过此实现,您现在负责在客户端或服务器上拥有自己的并发检查机制。

    【讨论】:

    • 它不应该是并发属性。 FName 字段出现错误。该模型不可用,因为它是由 Lightswitch 自动生成的。我已经添加了上面字段的元数据定义。我将在今天晚些时候尝试解决这个问题。如果 Lightswitch 不起作用,我可能会切换回 EF6 webapi Odata。
    • 元数据显示了 Lightswitch 自动设置了“并发模式='固定”的所有三个字段的并发属性集。我想 Breeze 不可能与 Lightswitch 一起工作。
    • 有一种方法可以绕过 Breeze 在客户端的并发检查。查看我更新的帖子。
    • 是的,hack 有效,但我已经切换到 EF 继续该项目。如果我真的回到 LS,那么我现在有一个解决办法。谢谢。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多