breeze BeforeSaveEntity does not save calculated value
当特定实体更新时,我需要在服务器端计算一些值。
如果我更新实体,则执行以下代码(设置 C_CompletePrice),它甚至反映在客户端(客户端微风很好地恢复了所有属性)
但是当我检查数据库时,什么都没有保存。因此,当清除浏览器缓存并再次检查实体时,会有旧值...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private bool BeforeSaveTransaction(tblTransactions transaction, EntityInfo info) { transaction.C_CompletePrice = 11111111; return true; ... protected override bool BeforeSaveEntity(EntityInfo entityInfo) { var entity = entityInfo.Entity; if (entity is tblTransactions) { return BeforeSaveTransaction(entity as tblTransactions, entityInfo); } ... |
我正在使用微风 1.4.6
在服务器上我正在使用 Breeze.WebApi 和 Breeze.WebApi.EF
我正在使用的模型:http://pastebin.com/Dc03DrNe
更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type, List<EntityInfo>> saveMap) { foreach (Type entityType in saveMap.Keys) { if (entityType.Name =="tblTransactions") { foreach (EntityInfo ei in saveMap[entityType]) { CalculateTransaction(ei); } } } return base.BeforeSaveEntities(saveMap); } private void CalculateTransaction(EntityInfo entityInfo) { tblTransactions transaction = (tblTransactions) entityInfo.Entity; transaction.C_CompletePrice = 1234567; ... |
使用
-
客户端上的实体得到更新 :)
-
数据库不是 :(
所以在我现在使用@dominictus 解决方案(覆盖SaveAll)之前,我恳请询问我使用过的那些方法的目的(bool BeforeSaveEntity(...) 和 BeforeSaveEntities(saveMap))。我已经咨询过医生,也看过 bryan noyes 精彩的复数课程,但我的头脑仍然很简单 :)
您是否按照
我做的有点不同。这是一个示例,我在更改对象时保存时间戳。这是我的 Context 类中的一个方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public override int SaveChanges() { foreach ( var entry in this.ChangeTracker.Entries() .Where((e => (e.State == (EntityState) Breeze.WebApi.EntityState.Added || e.State == (EntityState) Breeze.WebApi.EntityState.Modified)))) { if (entry.Entity.GetType() == typeof(MyClass)) { var entity = entry.Entity as MyClass; if (entity != null) entity.UpdatedDateTime = DateTime.Now; } } return base.SaveChanges(); } |
在你的情况下,你可以写:
至于方法