BreezeJS EntityManager.saveChanges() 不调用 acceptChanges()
BreezeJS EntityManager.saveChanges() not calling acceptChanges()
您好,感谢您的帮助。
我正在使用
"breeze-bridge-angular": "^4.0.1",
"breeze-client": "^1.6.3",
acceptChanges() 的文档说 "Breeze calls this method after a successful save." 并且不鼓励直接调用它。
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() 将复制之前创建的日实体,因为其状态未重置为未更改。
请帮助我理解我做错了什么。
非常感谢!
麦克
我回到服务器端的基础知识,发现我的控制器缺少一个属性:
[微风控制器]
没有这个属性,其他一切都继续工作(获取元数据、查询、本地创建、保存被持久保存到数据库中)——但是缺少这个属性,客户端实体管理器拒绝将持久实体标记为正确保存,因为对客户端的响应大不相同:
添加此属性后,服务器响应现在如下所示:
{
"$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 结果 w/o [BreezeController]:
{
"Entities": [
{
"id": 62,
"datetimme": null,
"blah": "999",
}
],
"KeyMappings": [
{
"EntityTypeName": "test_model.Day",
"TempValue": -2,
"RealValue": 62
}
],
"DeletedKeys": [ ],
"Errors": null
}
Steve Schmitt - 非常感谢您的帮助,因为您的评估是正确的,这让我找到了解决方案!
您好,感谢您的帮助。
我正在使用
"breeze-bridge-angular": "^4.0.1",
"breeze-client": "^1.6.3",
acceptChanges() 的文档说 "Breeze calls this method after a successful save." 并且不鼓励直接调用它。
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() 将复制之前创建的日实体,因为其状态未重置为未更改。
请帮助我理解我做错了什么。
非常感谢! 麦克
我回到服务器端的基础知识,发现我的控制器缺少一个属性:
[微风控制器]
没有这个属性,其他一切都继续工作(获取元数据、查询、本地创建、保存被持久保存到数据库中)——但是缺少这个属性,客户端实体管理器拒绝将持久实体标记为正确保存,因为对客户端的响应大不相同:
添加此属性后,服务器响应现在如下所示:
{
"$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 结果 w/o [BreezeController]:
{
"Entities": [
{
"id": 62,
"datetimme": null,
"blah": "999",
}
],
"KeyMappings": [
{
"EntityTypeName": "test_model.Day",
"TempValue": -2,
"RealValue": 62
}
],
"DeletedKeys": [ ],
"Errors": null
}
Steve Schmitt - 非常感谢您的帮助,因为您的评估是正确的,这让我找到了解决方案!