Breeze - 不会将BeforeSaveEntities中引入的更改返回给客户端?

时间:2015-07-14 15:51:25

标签: breeze

我正在努力寻找一个概念性问题的解决方案re BeforeSaveEntities。

简而言之,我想避免服务器通知客户端我在BeforeSaveEntities中的savemap中引入的实体删除。

更长的故事如下: - )

数据结构:我有一个名为PrimaryData的实体,它有一些称为SecondaryData的并行松散耦合实体。对于每个PrimaryData,都存在许多SecondaryData。

业务逻辑:每当用户删除客户端上的PrimaryData时,服务器都应删除任何相关的SecondaryData。

安全要求:不应通知客户端已删除SecondaryData。

实现:我已经实现了一个BeforeSaveEntities函数,我在其中捕获了PrimaryData的删除,并为我想要删除到SaveMap的SecondaryData添加了额外的EntityInfo。

事情按预期工作。 PrimaryData和SecondaryData都被删除。

问题:不幸的是,XHR显示客户端的返回包中包含已删除的SecondaryData。这违反了我上面的安全要求,不应告知客户端删除SecondaryData。客户端不需要知道应用程序的这一部分中的SecondaryData,因此不需要传输信息。我还是要重新加载缓存。

问题:是否可以指示breeze不返回已删除的SecondaryData?例如。通过我可以添加到SaveMap的EntityInfo中的设置?

BR 的Morten

1 个答案:

答案 0 :(得分:0)

Breeze没有内置的方法可以做到这一点。您可以在将SaveResult发送回客户端之前从SaveResult中删除有问题的实体。我不知道您使用的是哪种服务器端技术,但是在.NET WebAPI中它的外观如何:

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
    SaveResult sr = _context.SaveChanges(saveBundle);
    // remove entities of type SecondaryData
    sr.Entities = sr.Entities.Where(e => e.GetType() != typeof(SecondaryData)).ToList();
    return sr;
}