我继承了维护小型战斗游戏的工作。
该游戏有效,但是当用户单击浏览器中的“结束”按钮时,该游戏将永远不会保存到数据库中。
通过API收到“ HttpPut”请求后,将调用此方法:
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。
谢谢!
答案 0 :(得分: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;
}
检查游戏是否保存。这证明您的retval和GameService正常工作
然后,您可以添加一些逻辑以确保仅在dto.IsActiveBattle为false的情况下才保存它。
问题在于,当var retval = base.UpdateGameModel(g,dto);时,dto.IsActiveBattle变成了true。被叫。