2

一位朋友问“您是否有关于如何检查服务器上的 Breeze 变更集数据并在将数据提交到数据库之前执行服务器端验证和安全检查的示例或文档?” 我的回答如下。

4

1 回答 1

2

请参阅描述用于此目的的 Breeze.NET 工具的文档中的“自定义 EFContextProvider ”主题。

尽管本主题EFContextProvider<T>专门针对,但大多数要点适用于基类 ,ContextProvider<T>这在保存到任何类型的数据存储时都很有用(例如,请参见“NoDb”示例)。

BreezeMvcSpa 模板生成的应用程序提供了保存验证的味道(从广义上理解为包括安全检查)。

BreezeMvcSpa 模板将于 2013 年 2 月与“ASP.NET 和 Web 工具 2012.2”一起发布

查看继承自的 Models/ TodoRepository.csEFContextProvider<T>。它覆盖BeforeSaveEntity(entityInfo)以确认您始终在更新/删除TodoList属于TodoItem当前用户的 /。它还将当前用户分配给一个新的TodoList. 在一个真实的应用程序中,这将是一些专门用于验证特定实体类型的辅助类的调度程序,我将在下面稍微详细说明这一点。

还有另外两个重要的覆盖:

BeforeSaveEntities(saveMap)让您有机会一次检查整个变更集。这是验证整个变更集作为一个整体的好方法,也许可以确保此保存请求作为单个事务有意义。这也是进行一些跨实体检查的好地方。BeforeSaveEntities(saveMap)在单独调用BeforeSaveEntity(entityInfo)每个实体后调用。

BeforeSaveEntities(saveMap)可能是将验证委托给专用助手类的一个很好的调度点。我怀疑我会将我所有的验证逻辑放在一个ContextProvider大类中。我不介意所有保存活动都通过ContextProvider.SaveChanges大门,但我不想自己完成所有工作ContextProvider

SaveChangesCore是另一个重要的覆盖。在那里您进行任何最终的预保存准备并将更改集交给实际执行数据库保存的东西(例如,DbContext.SaveChanges方法)。您可以在将控制权返回给ContextProvider.

另请注意,在使用 时DbContextEF 会应用您在模型属性中规定的验证,包括标准集和自定义验证属性。

我有更多保存建议,但这可能足以立即消化。

于 2013-02-16T18:37:40.563 回答