Проверьте пакет сохранения бриза, прежде чем переходить к контроллеру бриза.

Везде, где я смотрю на проверку ответа перед сохранением в БД, на ветру они переопределяют BeforeSaveEntity или BeforeSaveValidation. например проблемы breezejs с пакетом сохранения. Можем ли мы в любом случае проверить savebundle перед вызовом saveChanges(), как на уровне репозитория?

Я хочу передать пакет сохранения JObject из контроллера в соответствующий репозиторий и сделать там несколько вещей: 1) проверить, есть ли у пользователя разрешение на сохранение этого объекта 2) выполнить проверку на уровне бизнес-логики 3) выполнить операции на уровне объекта, такие как обновление changeDate и changeUser, добавьте значения по умолчанию в какой-либо другой объект и т. д.

Это больше похоже на операции на уровне бизнес-логики, и в нашем приложении у нас есть около 20+ таких сущностей, которые сохраняются из разных частей приложения. Если мы переопределяем BeforeSaveEntity(), мы выполняем все подобные проверки на уровне бизнес-логики для всех сущностей внутри DataContext. Нравиться

`if (entityInfo.Entity.GetType() == typeof(MyEntityTypeModel)) {
 }`

Я не думаю, что условие if-else или case для 20+ сущностей - хороший дизайн. Кроме того, у нас есть четкое разделение ответственности за счет использования репозиториев, поэтому я думаю, что именно здесь это и должно быть сделано.

Как мы можем манипулировать/проверять savebundle в таком случае?


person devC    schedule 30.01.2015    source источник


Ответы (1)


Используйте метод BeforeSaveEntities (задокументировано здесь: http://www.getbreezenow.com/breeze-sharp-documentation/contextprovider). С помощью этого метода вы можете работать со ВСЕМИ объектами указанного типа без необходимости выполнять тест «если» для каждого из них.

Код может выглядеть примерно так:

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;
}
person Jay Traband    schedule 30.01.2015
comment
Что делать, если я хочу установить некоторые свойства объекта? Или добавить другой тип объекта? Скажем, например, у меня есть объект «Курс», когда я добавляю новый курс, мне нужно добавить некоторые классы по умолчанию в объект «Курсклассы». Могу ли я просто добавить его в карту сохранения? - person devC; 30.01.2015
comment
Да, просто измените существующую карту сохранения, добавив, удалив или изменив в ней сущности. - person Jay Traband; 30.01.2015
comment
Даже здесь, если я хочу изменить другой тип объекта, скажем, студент, я должен использовать else if (saveMap.TryGetValue(typeof(Student), out studentEntityInfo) и т. д.), верно? Я пытаюсь избежать этого - person devC; 30.01.2015