MVC ASP.NET写入数据库是无意中循环的

时间:2017-05-27 12:56:54

标签: c# asp.net asp.net-mvc database visual-studio

我是MVC和ASP.NET的新手,但我遇到了一个奇怪的问题。

我正在向我的数据库中添加一个条目,然后保存更改,但事实并非如此。

[Authorize]
    public ActionResult EggRecieved()
    {
        //CHECK IF THEY HAVE RECIEVED EGG IN LAST DAY

        var user = db.PDCUsers.SingleOrDefault(x => x.Username == User.Identity.Name);
        var userId = user.Id;

        var possibleEggs = db.PkmnDatas.Where(x => x.CanBeEgg == true);
        var rand = new Random();
        var no = rand.Next(0, possibleEggs.Count());
        var pokemonArray = possibleEggs.ToArray();
        var pokemon = pokemonArray[rand.Next(0, pokemonArray.Count())];
        Boolean? isMale = null;
        if (pokemon.GenderRatio != null)
        {
            isMale = rand.Next(0, 1000) < pokemon.GenderRatio1.ChanceMale * 1000;
        }
        var isShiny = 1 == rand.Next(1,Constants.SHINYCHANCE);
        //GET THE ABILITIES

        db.PlayerPkmns.Add(new PlayerPkmn
        {
            PkmnDataId = pokemon.Id,
            Nickname = pokemon.Name,
            IsMale = (bool)isMale,
            Nature = rand.Next(1, 25),
            Ability = 1,
            EggObtained = DateTime.Now,
            Shiny = isShiny,
            CurrentTrainerId = userId,
            OriginalTrainerId = userId,
            StepsToHatch = Constants.TOTALSTEPSFOREGGHATCH
        });

        db.SaveChanges();

        return EggRecieved();
    }

当我点击一个按钮时,我调用此方法,然后服务器需要半分钟,并说它无法访问该视图。

然后我检查我的数据库,我有500多个新的数据行。

我不确定发生了什么,但看起来它不断调用此方法并写入数据库。

任何人都知道为什么,以及我如何解决它?

3 个答案:

答案 0 :(得分:5)

您最后使用

递归调用该方法
CASE

您应该返回return EggRecieved(); ,例如

ActionResult

答案 1 :(得分:2)

这种情况正在发生,因为你在return语句中写道:

year_list = []
for data in my_list:
    year = data[0]
    data.insert(1, Area)
    if year in year_list:
        data.insert(2, "Metro")
    else:
        data.insert(2, None)
        year_list.append(year)
    file.write("|".join(map(str, data)) + '\n')

这意味着你再次调用相同的方法并且它陷入无限循环抛出错误。使用View或Json等删除它。

答案 2 :(得分:1)

你在代码末尾写的是返回EggRecieved()即worng, 你需要返回你想要的视图()。 所以将EggRecieved替换为view();因为当你返回EggRecieved()时它会进行递归循环并每次调用 谢谢