BreezeJS EntityManager.saveChanges()没有调用acceptChanges()

时间:2017-10-13 21:48:04

标签: breeze

您好,感谢您的帮助。

我正在使用

"breeze-bridge-angular": "^4.0.1",
"breeze-client": "^1.6.3",

acceptChanges()的文档说“Breeze在成功保存后调用此方法”。并且不鼓励直接调用它。

http://breeze.github.io/doc-js/entitymanager-and-caching.html

但是,根据我的经验,正如这个简单的代码所示,它不会:

  let day = this.em.createEntity("Day", { 'note': '', 'owner_id': 1});
  await this.em.saveChanges();
  let changes = this.em.hasChanges(); // true
  this.em.acceptChanges();
  changes = this.em.hasChanges();  // false

实体日在数据库中创建得很好,但是如果不手动调用acceptChanges(),则后续的saveChanges()将复制先前创建的日实体,因为其状态未重置为UNCHANGED。

请帮助我理解我做错了什么。

非常感谢! 麦克

1 个答案:

答案 0 :(得分:1)

我回到了服务器端的基础知识,发现我错过了控制器的一个属性:

<强> [BreezeController]

如果没有此属性,其他所有内容都会继续工作(获取元数据,查询,本地创建,保存持久保存到数据库) - 但是缺少此属性,客户端实体管理器拒绝将持久化实体标记为正确保存,因为响应对客户来说是非常不同的:

添加此属性,服务器响应现在如下所示:

{
  "$id": "1",
  "$type": "Breeze.ContextProvider.SaveResult, Breeze.ContextProvider",
  "Entities": [
    {
      "$id": "2",
      "$type": "reflectionship_model.blah, blah-model",
      "Id": 8,
      "X": 999,
      "Y": "blah"
    }
  ],
  "KeyMappings": [
    {
      "$id": "3",
      "$type": "Breeze.ContextProvider.KeyMapping, Breeze.ContextProvider",
      "EntityTypeName": "blah_model.Blah",
      "TempValue": -1,
      "RealValue": 8
    }
  ],
  "DeletedKeys": [ ],
  "Errors": null
}

json结果没有[BreezeController]:

{
  "Entities": [
    {
      "id": 62,
      "datetimme": null,
      "blah": "999",
    }
  ],
  "KeyMappin‌​gs": [
    {
      "EntityTypeNam‌​e": "test_model.Day",
      ‌​"TempValue": -2,
      "Real‌​Value": 62
    }
  ],
  "Deleted‌​Keys": [ ],
  "Errors": nu‌​ll
} 
史蒂夫施密特 - 非常感谢你的帮助,因为你的评估是正确的,这使我得到了解决方案!