Чтобы протестировать уровень доступа к данным более широкого проекта, я написал простое консольное приложение в качестве тестового набора для вызова DAL.
Сохранение данных является двухэтапной операцией. Первый шаг - сохранить основную информацию из отчета и ДОЛЖЕН БЫТЬ успешным. Второй шаг - расшифровать необработанные данные в модели, а затем сохранить их, но если это не удастся, это не является большой проблемой и будет сообщили и адресовали позже.
Весь процесс должен выполняться асинхронно (это часть REST), но вызовы await _context.SaveChangesAsync()
не выглядят ожидающими, и приложение завершается, и данные не сохраняются.
Ниже приведен упрощенный пример обновления БД
public async Task<bool> SubmitFlightReportAsync(string ReportData)
{
try
{
// Save the primary data - MUST Succeed
_logger.LogInformation("Saving primary data database ");
Models.MyReport myRpt = new Models.MyReport()
{
Status = 1,
RawData = ReportData
};
_context.MyReports.Add(myRpt);
if (await _context.SaveChangesAsync() > 0)
{
_logger.LogInformation("Primary save complete");
// Now update with all the extracted data - Optional Succeed
try
{
_logger.LogInformation("Extracting secondary data");
/*
*
* Here is where we extract all the information from the Report Data
* and update the Model, before saving
*
*/
_logger.LogInformation("Saving extracted data");
if (await _context.SaveChangesAsync() > 0)
{
_logger.LogDebug("Secondary save complete");
}
}
catch (Exception ex)
{
_logger.LogError("Error saving secondary data ");
}
}
else
{
_logger.LogInformation("Primary save failed");
}
}
catch (Exception ex)
{
_logger.LogCritcal("Something went horrobly wrong");
}
}
.и вызывается из консольного приложения как такового ...
_logger.LogInformation("Starting application");
_fltSvc.SubmitFlightReportAsync("this is the report data as a string")
_logger.LogInformation("All done");
Когда я запускаю приложение, вот что регистрируется в журнале ...
object:Information: Starting application
object:Information: Saving primary data database
... Where's all the other logging messages?
object:Information: All done
Как видите, он доходит до точки первого SaveChangesAsync
, немного ждет, как будто он что-то делает, а затем возвращается к основному потоку ..... и НЕТ ДАННЫХ не сохраняется в базы данных.
Я уверен, что это что-то довольно простое, но я просто вижу это ...
Спасибо.