BreezeJS EntityManager.saveChanges()不调用acceptChanges()

BreezeJS EntityManager.saveChanges()不调用acceptChanges(),breeze,Breeze,你好,谢谢你的帮助 我正在使用 "breeze-bridge-angular": "^4.0.1", "breeze-client": "^1.6.3", acceptChanges的文档称Breeze在成功保存后调用此方法。不鼓励直接打电话 但是,根据我的经验,正如这段简单代码所示,它并没有: let day = this.em.createEntity("Day", { 'note': '', 'owner_id': 1}); await this.em.saveChanges()

你好,谢谢你的帮助

我正在使用

"breeze-bridge-angular": "^4.0.1",
"breeze-client": "^1.6.3",
acceptChanges的文档称Breeze在成功保存后调用此方法。不鼓励直接打电话

但是,根据我的经验,正如这段简单代码所示,它并没有:

  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将复制先前创建的日实体,因为其状态未重置为未更改

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

非常感谢!
Mike

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

[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
}
不带[BreezeController]的json结果:

{
  "Entities": [
    {
      "id": 62,
      "datetimme": null,
      "blah": "999",
    }
  ],
  "KeyMappin‌​gs": [
    {
      "EntityTypeNam‌​e": "test_model.Day",
      ‌​"TempValue": -2,
      "Real‌​Value": 62
    }
  ],
  "Deleted‌​Keys": [ ],
  "Errors": nu‌​ll
} 

史蒂夫·施密特-非常感谢您的帮助,因为您的评估是正确的,这让我找到了解决方案

当服务器有适当的响应时,将调用acceptChanges方法。响应应包含成功保存的每个实体。请检查您的服务器响应。通过Fiddler 4{实体:[{id:62,DateTime:null,注意:,所有者id:1,gps:null,感觉:[],记忆:[],想法:[],关系:null,会话:[]}],键映射:[{EntityTypeName:test_model.Day,TempValue:-2,RealValue:62}],DeletedKeys:[],错误:null}发布对SaveChanges的响应服务器响应似乎不包含实体类型,因此Breeze无法将其与缓存中的实体匹配。您可能需要调整服务器端JSON序列化设置。