我正在努力寻找一个概念性问题的解决方案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
答案 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;
}