Проверка на стороне сервера Breeze с контроллера

#entity-framework #breeze

#entity-framework #breeze

Вопрос:

У меня есть Объект, скажем, «Автомобиль», который имеет много связей с другими объектами. Одно из отношений связано с сущностью «ParkingSpot». Отношение в Entity Framework — это 1 автомобиль ко многим парковочным местам, но оно всегда 1 к 1, просто 1 ко многим в EF, что является другой историей.

Я бы хотел использовать метод удаления на стороне сервера, который выполняет следующее —

  1. Выполните проверку ошибок (для всех отношений с ограничением FK, кроме ParkingSpot), удобные для пользователя ошибки поставщика
  2. Удалите этот автомобиль из точки парковки (так что удаление сработает, если все остальные ошибки ограничения пройдут)
  3. Удалить Автомобиль

Прямо сейчас у меня есть метод

 [HttpGet]
public bool DeleteCar(int carId) 
 

я создаю исключение HttpResponseException для каждой ошибки. Таким образом, пользователь может получить сообщение об ошибке, устранить проблему, повторить попытку, получить другую ошибку и т.д., Что довольно неубедительно. Я попытался вызвать исключение EntityErrorsException с набором ошибок EFEntityErrors, как описано здесь — http://www.breezejs.com/documentation/server-side-validation

Но это было только в виде строки JSON в данных httpresponse, возможно, потому, что это не было сделано в BeforeSaveEntitiesDelegate, как показано в статье? Я действительно не могу сделать это здесь, потому что в других случаях требуется удалить этот объект другими способами, при которых вы хотели бы, чтобы ограничение «ParkingSpot» не выполнялось.

Каков наилучший способ обеспечить такую проверку?

Комментарии:

1. Не могли бы вы более подробно объяснить, почему вы не можете выполнить проверку внутри BeforeSaveEntities . Я подозреваю, что вы найдете способ сделать это там.

2. @david004 — В одном сценарии мне нужно убрать машину с места парковки, а затем удалить машину. В других сценариях я хочу, чтобы удаление завершилось неудачно, если оно находится в месте парковки. Так что у меня действительно есть другой параметр для этого сценария public bool DeleteCar(int carId, bool removeFromSpot)