Я унаследовал работу по ведению небольшой битвы.
Игра работает, но когда пользователь нажимает кнопку "Завершить" в браузере, игра никогда не сохраняется в базе данных.
Этот метод вызывается после получения запроса "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.
Спасибо!
Попробуй это
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); назывался.