无处不在我看到在保存到数据库之前验证响应,在微风中,它们会覆盖BeforeSaveEntity或BeforeSaveValidation。 例如breezejs issues with the save bundle。无论如何我们可以在调用saveChanges()之前验证savebundle,就像在存储库级别一样?
我想将JObject savebundle从控制器传递到相关的存储库并在那里做一些事情: 1)检查用户是否有权保存此实体 2)进行业务逻辑级验证 3)执行实体级操作,例如更新changedDate和changedUser,将默认值添加到其他实体等...
这些更像是业务逻辑级操作,在我们的应用程序中,我们有20多个这样的实体可以从应用程序的不同部分保存。如果我们重写BeforeSaveEntity(),我们正在为DataContext中的所有实体执行所有此类业务逻辑级验证。喜欢
`if (entityInfo.Entity.GetType() == typeof(MyEntityTypeModel)) {
}`
我不认为20多个实体的其他或案例条件是否是一个好的设计。此外,我们通过使用存储库明确区分了关注点,所以我认为应该这样做。
在这种情况下,我们如何操纵/验证savebundle?
答案 0 :(得分:1)
使用 BeforeSaveEntities 方法(此处记录:http://www.getbreezenow.com/breeze-sharp-documentation/contextprovider)。使用此方法,您可以使用指定类型的所有实体,而无需对每个实体执行“if”测试。
代码可能如下所示:
ContextProvider.BeforeSaveEntitiesDelegate = CheckFreightOnOrders;
return ContextProvider.SaveChanges(saveBundle);
private Dictionary<Type, List<EntityInfo>> CheckFreightOnOrders(Dictionary<Type, List<EntityInfo>> saveMap) {
List<EntityInfo> entityInfos;
// extract just those entities of type 'Order'
if (saveMap.TryGetValue(typeof(Order), out orderEntityInfos)) {
// then iterate over them.
foreach (var entityInfo in orderEntityInfos) {
CheckFreight(entityInfo);
}
}
return saveMap;
}