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

Breeze-是否将BeforeSaveEntities中引入的更改返回给客户端?,breeze,Breeze,我正在努力找到一个解决方案来解决一个概念性的问题 简言之,我希望避免服务器通知客户端我在BeforeSaveEntities的savemap中引入的实体删除 更长的故事如下:- 数据结构:我有一个名为PrimaryData的实体,它有一些称为SecondaryData的并行松散耦合实体。对于每个PrimaryData,都存在多个SecondaryData 业务逻辑:每当用户删除客户机上的主数据时,服务器都应该删除任何相关的辅助数据 安全要求:不应通知客户端已删除辅助数据 实现:我已经实现了Bef

我正在努力找到一个解决方案来解决一个概念性的问题

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

更长的故事如下:-

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

业务逻辑:每当用户删除客户机上的主数据时,服务器都应该删除任何相关的辅助数据

安全要求:不应通知客户端已删除辅助数据

实现:我已经实现了BeforeSaveEntities函数,在该函数中,我捕获对PrimaryData的删除,并为我也要删除的SecondaryData添加额外的EntityInfo到SaveMap中

事情按预期进行。主要数据和次要数据都将被删除

问题:不幸的是,XHR显示返回给客户机的包中包含已删除的SecondaryData。这违反了我上面的安全要求,即不应告知客户机删除第二个数据。客户端不需要知道应用程序这一部分中的辅助数据,因此不需要传输信息。无论如何,我都要重新加载缓存

问题:是否可以指示breeze不返回已删除的次要数据?例如,通过EntityInfo中可以添加到SaveMap的设置


莫顿

微风没有内置的方式来实现这一点。在将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;
}

3个词:代码、代码片段、请我有点期待这不是一个内置的功能:-/您建议从SaveResult中删除SecondayData是好的。这将适用于这个问题中的用例,但我有另一个用例,用户直接在客户端上操作第二个数据。显然,这不适用于上述SaveChanges。我想我可以在这篇文章中为用例创建一个命名的save,它将从SaveResult中删除SecondaryData。但是一个有决心的用户可以通过使用普通的SaveChanges来避免这种情况,它将返回已删除的第二个数据。由于总体目的是对有决心的用户隐藏我的业务逻辑,我有点卡住了。Steve回答了我的问题,并提出了一个建议,该建议将适用于我所述的用例。我相信你能做到这一点。但我认为我的解决方案是使用BeforeSaveEntities函数中的实体框架直接在数据库中进行删除。我需要小心我将要使用的上下文,但应该是可能的。这将绕过Breeze,因此Breeze将无法告诉客户端有关它的信息。除了命名的保存外,您还可以根据其他信息决定在删除的服务器上执行什么操作或保留辅助数据。例如,用户的标识或更改集中的其他实体。