Breeze BeforeSaveEntityonly 只允许更新已添加的实体

2023-11-26

不知道这是有意为之还是错误,但是下面使用 BeforeSaveEntity 的代码只会修改新创建的记录的实体(EntityState =已添加),并且不适用于已修改的记录,这是正确的吗?

    protected override bool BeforeSaveEntity(EntityInfo entityInfo)
    {
        var entity = entityInfo.Entity;
        if (entity is User)
        {
            var user = entity as User;
            user.ModifiedDate = DateTime.Now;
            user.ModifiedBy = 1;
        }
...

这个问题的根源在于,在breeze服务器上,我们没有任何内置的更改跟踪机制来跟踪服务器上所做的更改。服务器实体可以是纯 poco。微风客户端对任何客户端更改都有丰富的更改跟踪功能,但是当您到达服务器时,您需要自己管理。

出现此问题的原因是我们在服务器上执行了优化,因此我们只更新那些已更改的属性。即,任何 SQL 更新语句仅对更改的列进行。显然,这对于添加或删除或我们更新已在客户端上更新的列的情况不是问题。但是,如果您更新服务器上未在客户端上更新的字段,则微风对此一无所知。

理论上,我们可以对进入服务器的每个实体进行快照,然后迭代实体上的每个字段,以确定在保存拦截期间是否进行了任何更改,但我们真的讨厌性能影响,特别是因为这种情况很少发生。

因此,此处另一个答案中提出的更新服务器端 OriginalValues Map 的建议是正确的,并且将完全满足您的需要。

此外,从版本 1.1.3 开始,还有一个额外的EntityInfo.ForceUpdate您可以设置的标志将告诉微风更新指定实体中的每一列。这并不像上面的建议那么高效,但它更简单,并且在两种情况下效果都是相同的。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Breeze BeforeSaveEntityonly 只允许更新已添加的实体 的相关文章

随机推荐