首页 > 解决方案 > 对 dto 和类对象进行逻辑检查

问题描述

我继承了维护一个小型战斗游戏的工作。

游戏可以运行,但是当用户单击浏览器中的“结束”按钮时,游戏永远不会保存到数据库中。

通过 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 总是“真”并且 GameService.End() 从未被调用过。

如果我将dto.IsActiveBattle == false更改为retval.IsActiveBattle == false,那么它会被调用。

我的问题是,检查 dto.IsActiveBattle 和 retval.IsActiveBattle 是否有意义?

我不确定为什么原始开发人员同时检查 dto.IsActiveBattle != null 和 dto.IsActiveBattle == false。

谢谢!

标签: c#asp.net-mvcasp.net-web-apidto

解决方案


尝试这个

  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;被称为。


推荐阅读