SQL无法正确更新

时间:2018-11-15 15:20:39

标签: c# sql asp.net

对于我们的项目,我们有一张桌子,可以在其中获得一天比赛的所有足球结果。根据他们的SQL数据库值,将显示输入,用户可以在其中添加匹配结果。当我们点击“保存”按钮时,将触发插入数据库。出于某些原因,有时并非所有行都会添加到数据库中。

[HttpPost("UpdateMatchDayScore")]
public async void UpdateMatchDayScore([FromBody]UpdateMatchDayScoreViewModel[] model)
{
    var matchDayId = model[0].matchDayId;
    var poolId = model[0].poolId;
    RankingSearch rankingSearch =  await _rankingService.CreateNewRanking(matchDayId, poolId);
    foreach (var t in model)
    {
        _matchDayService.UpdateMatchDayScore(rankingSearch.RankingId,t.poolId, t.homeTeamId, t.awayTeamId, Int32.Parse(t.scoreHome),Int32.Parse(t.scoreAway), t.matchDayId);
    }
    _calculateRanking.CalculatePosition(rankingSearch.RankingId);
}

这是我们的视图模型:

public class UpdateMatchDayScoreViewModel
{
    public int poolId  { get; set; }
    public int homeTeamId { get; set; }
    public int awayTeamId { get; set; }
    public string scoreHome { get; set; }
    public string scoreAway { get; set; }
    public int matchDayId { get; set; }
}

这是我们比赛日的资源库:

public async void UpdateMatchDayScore(int poolId, int homeTeamId, int awayTeamId,
int scoreHome, int scoreAway,
int matchDayId)
{
    using (var conn = _connector.OpenConnection())
    {
         await conn.QueryAsync<MatchDay>(StoredProcs.UpdateMatchScore,
            new
            {
                pouleId = poolId,
                awayTeamId = awayTeamId,
                homeTeamId= homeTeamId,
                scoreAway = scoreAway,
                scoreHome = scoreHome,
                matchDayId = matchDayId
            }, CommandType.StoredProcedure);
    }
}

这是我们的比赛日服务:

public void UpdateMatchDayScore(int rankingId, int poolId, int homeTeamId, int awayTeamId, int scoreHome, int scoreAway, int matchDayId)
{
    _calculateRanking.CalculateRankings(rankingId, matchDayId, awayTeamId, homeTeamId, scoreHome, scoreAway);
    _matchDayRepository.UpdateMatchDayScore(poolId, homeTeamId, awayTeamId, scoreHome, scoreAway,
        matchDayId);
}

样本模型:

    {
                pouleId = 46273,
                awayTeamId = 400069,
                homeTeamId= 400002,
                scoreAway = 2,
                scoreHome = 4,
                matchDayId = 12}

我们进行了一些数学运算,总共为一个比赛日(包含8场比赛)打开了41个联系。我们认为我们可能一次做很多事情?有人可以帮助我们吗?

1 个答案:

答案 0 :(得分:0)

这看起来不像是连接数问题,而是您调用方法的方式。

您的代码混合了Async和Sync方法。最重要的是,并非在所有地方都使用“ await”来正确调用Async方法。这是麻烦的公开邀请。

阅读这篇文章,以了解当您这样做时可能遇到的问题。 https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

  

注意:这篇文章讨论了死锁,但也适用于您的情况。

我假设foreach循环由于在某些情况下未收到正确的Task状态而缺少更新某些记录。

我建议,如果您不熟悉async-await域,请先尝试仅使用同步方法的代码,然后再尝试应用async功能。

如果某些方法仅用于async,则可以在代码末尾添加.Wait()方法,以使代码等待Task完成后再移至下一条语句执行。

https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.wait?view=netframework-4.7.2#System_Threading_Tasks_Task_Wait

希望这会有所帮助!