使用 breeze.js 我只想发送 non-cached 实体的更新属性
Using breeze.js I only want to send updated properties for a non-cached entity
我有一个场景,我知道一个实体的主键(从不相关的来源检索),我只想更新 1 属性(数据库列)。我还没有从数据库中检索到实体。如果可能的话,我希望不必进行这次额外的往返。
我使用 manager.createEntity 创建实体。
我更新了其中一个属性。
然后将entityAspect设置为setModified();
保存更改时,所有未更新的属性都设置为其默认值,并且生成的 SQL UPDATE 语句尝试更新所有映射的列。
有没有办法告诉 breeze 只为特定的 properties/columns 生成 SQL?
谢谢
如您所见,originalValuesMap
的属性指导 Breeze 服务器的 ContextProvider
准备保存请求。这记录在 ContextProvider topic.
在您的示例中,您在更改 属性 后调用 setModified
。所做的只是改变 EntityState
;它不会在客户端实体的 entityAspect.originalValuesMap
中创建条目...因此发送到服务器的 originalValuesMap
是空的。
I'm a little surprised that the EFContextProvider.SaveChanges
prepared an EF update of the entire entity. I would have guessed that it simply ignored the entity all together. I'm making a mental note to investigate that myself. Not saying the behavior is "right" or "wrong".
您不必操纵 originalValuesMap
来实现您的目标。只是改变顺序。试试这个:
var foo = manager.createEntity('Foo', {
id = targetId
}, breeze.EntityState.Unchanged); // create as if freshly queried
foo.bar = 'new value'; // also sets 'originalValues' and changes the EntityState
manager.saveChanges(); // etc.
让我们知道这是否有效。
我有一个场景,我知道一个实体的主键(从不相关的来源检索),我只想更新 1 属性(数据库列)。我还没有从数据库中检索到实体。如果可能的话,我希望不必进行这次额外的往返。
我使用 manager.createEntity 创建实体。 我更新了其中一个属性。 然后将entityAspect设置为setModified(); 保存更改时,所有未更新的属性都设置为其默认值,并且生成的 SQL UPDATE 语句尝试更新所有映射的列。
有没有办法告诉 breeze 只为特定的 properties/columns 生成 SQL?
谢谢
如您所见,originalValuesMap
的属性指导 Breeze 服务器的 ContextProvider
准备保存请求。这记录在 ContextProvider topic.
在您的示例中,您在更改 属性 后调用 setModified
。所做的只是改变 EntityState
;它不会在客户端实体的 entityAspect.originalValuesMap
中创建条目...因此发送到服务器的 originalValuesMap
是空的。
I'm a little surprised that the
EFContextProvider.SaveChanges
prepared an EF update of the entire entity. I would have guessed that it simply ignored the entity all together. I'm making a mental note to investigate that myself. Not saying the behavior is "right" or "wrong".
您不必操纵 originalValuesMap
来实现您的目标。只是改变顺序。试试这个:
var foo = manager.createEntity('Foo', {
id = targetId
}, breeze.EntityState.Unchanged); // create as if freshly queried
foo.bar = 'new value'; // also sets 'originalValues' and changes the EntityState
manager.saveChanges(); // etc.
让我们知道这是否有效。