У меня есть работа Azure, которая асинхронно сохраняет записи в базе данных. Я нахожу, что он фактически ничего не сохраняет в базе данных. Я определенно использую async/ждет везде. Я добавляю родительские (рыночные) и дочерние записи. Моя база данных имеет референтные ограничения, поэтому родитель должен существовать перед дочерним элементом, но это должно быть хорошо, поскольку я делаю их в правильном порядке. У меня нет попыток уловить мои методы, и в лазурных журналах ничего нет, поэтому кажется, что работа преуспевает. Я вызвал Method1 с ожиданием от Winforms exe, и он отлично работает. Что может быть неправильным?SaveChangesAsync не работает внутри Azure webjob
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;
}
}
Вы не можете сказать, что что-то проглотило, если не было обработки ошибок и не было регистрации. Где вы ожидали увидеть ошибку? –
@Panagiotis Kanavos, как правило, необработанные ошибки времени выполнения отображаются на выходном веб-задании для экземпляра, который он запускал, который вы можете видеть на портале Azure. –
Не следует предполагать, что среда будет регистрировать любые необработанные исключения. Вы должны использовать правильную обработку исключений и протоколирование и регистрировать исключение * whole *, а не только 'ex.Message'. 'Exception.ToString()' возвращает стек вызовов, а также показывает, где именно произошла ошибка. Много раз, это не то место, где вы думали, что это –