проверка логики на объекте dto и class

2

Я унаследовал работу по ведению небольшой битвы.

Игра работает, но когда пользователь нажимает кнопку "Завершить" в браузере, игра никогда не сохраняется в базе данных.

Этот метод вызывается после получения запроса "HttpPut" через API:

   protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto)
    {
        var retval = base.UpdateGameModel(g, dto);
        if (dto.IsActiveBattle != null && dto.IsActiveBattle == false) {
            GameService.SaveToDatabase(g);
        }
        return retval;
    }

"dto" представляет TroopMappingSessionDto, который является объектом передачи данных.

"g" представляет модель класса TroopMappingSession.

"retval" представляет обновленную модель класса TroopMappingSession.

Как это так, dto.IsActiveBattle всегда "true" и GameService.End() никогда не вызывался.

Если я изменю dto.IsActiveBattle == false на retval.IsActiveBattle == false, то он будет вызван.

Мой вопрос: имеет ли смысл проверять как dto.IsActiveBattle, так и retval.IsActiveBattle?

Я не уверен, почему первоначальный разработчик проверял dto.IsActiveBattle! = Null и dto.IsActiveBattle == false.

Спасибо!

  • 1
    dto.IsActiveBattle, вероятно, является недействительным bool в базе данных, поэтому проверка на ноль
  • 0
    @ozzy432836 ozzy432836 Я только что проверил, это недобросовестный бул.
Показать ещё 1 комментарий
Теги:
asp.net-mvc
asp.net-web-api
dto

1 ответ

2

Попробуй это

  protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto)
    {
        var retval = base.UpdateGameModel(g, dto);
        //if (dto.IsActiveBattle != null && dto.IsActiveBattle == false) {
            GameService.SaveToDatabase(g);
        //}
        return retval;
    }

Проверьте, сохраняет ли игра. Это доказывает ваш возврат и GameService работают

Затем вы можете добавить некоторую логику, чтобы обеспечить сохранение, например, только если dto.IsActiveBattle имеет значение false.

Дело в том, что может быть dto.IsActiveBattle был изменен на true, когда var retval = base.UpdateGameModel(g, dto); назывался.

  • 0
    Да, retval.IsActiveBattle был изменен на «true» после вызова UpdateGameModel (). Однако при пошаговом выполнении кода dto.IsActiveBattle всегда имеет значение «true», поэтому его не сохраняли в базе данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню