【发布时间】:2013-12-10 03:02:31
【问题描述】:
当特定实体更新时,我需要在服务器端计算一些值。 如果我更新实体,则执行以下代码(设置 C_CompletePrice),它甚至反映在客户端(客户端微风很好地恢复了所有属性) 但是当我检查数据库时,什么都没有保存。所以当清除浏览器缓存并再次检查实体时,会有旧值......
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
更新
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;
...
使用BeforeSaveEntities 会导致同样的奇怪行为:
客户端上的实体得到更新 :)
数据库不是 :(
所以在我现在使用@dominictus 解决方案(覆盖 SaveAll)之前,我恳请您了解我使用过的那些方法的目的(bool BeforeSaveEntity(...)和 BeforeSaveEntities(saveMap))。我咨询过医生,也看过 bryan noyes 精彩的复数视力课程,但我的头脑仍然很简单:)
【问题讨论】:
标签: breeze