SaveChangesAsync在Azure webjob中无法正常工作

时间:2016-10-28 09:17:49

标签: azure async-await azure-webjobs

我有一个Azure作业,它将记录异步保存到数据库中。我发现它实际上没有保存到数据库的任何东西。我肯定在任何地方使用异步/等待。我正在添加父(市场)和子记录。我的数据库具有引用约束,因此父项必须存在于子项之前,但这应该没问题,因为我按正确的顺序执行它们。我的方法没有尝试,天蓝色的日志中没有任何内容,所以看起来工作成功了。我已经使用Winforms exe中的await调用了Method1,它可以正常工作。什么可能是错的?

    public static async Task MyJob([TimerTrigger("00:02:00", RunOnStartup = true)] TimerInfo timerInfo, TextWriter log)
    {
        await Jobs.Method1(Client, Logger);
    }


    public static async Task Method1(IClient client, ILogger logger)
    {
    await DataRepository.AddMarket(event.Id, event.MarketId);
        await DataRepository.AddMarketChild(event.MarketId, 999);
     }


    public static async Task<Market> AddMarket(string eventId, string marketId)
    {
        using (var ctx = BTBEntities.CreateContext())
        {
            var market = new Market()
            {
                MarketId = marketId,
                EventId = eventId,
            };
            ctx.Markets.Add(market);
            await ctx.SaveChangesAsync();
            return market;
        }
    }

   public static async Task<HorseBet> AddHorseBet(string marketId, long selectionId)
    {
        using (var ctx = BTBEntities.CreateContext())
        {
            var bet = new MarketChild()
            {
                MarketId = marketId,
                SelectionId = selectionId,
            };
            ctx.MarketChilds.Add(bet);
            await ctx.SaveChangesAsync();
            return bet;
        }
    }

1 个答案:

答案 0 :(得分:0)

原来有一个数据库问题,它被Azure吞没了。这就是我修复它的方法。

    public override System.Threading.Tasks.Task<int> SaveChangesAsync()
    {
        try
        {
            return base.SaveChangesAsync();
        }
        catch (DbEntityValidationException ex)
        {
            var errorMessages = ex.EntityValidationErrors
            .SelectMany(x => x.ValidationErrors)
            .Select(x => x.ErrorMessage);
            var fullErrorMessage = string.Join("; ", errorMessages);
            var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);                
            throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
        }
    }