public static async Task <List <MediaMetadata> > GetAllMetadatasAsync(this MediaMetaDatabaseContext context) { List <MediaMetaJson> metaJsons = null; using (new DisposableLogger( DatabaseLog.QueryBegin, (sw) => DatabaseLog.QueryEnd(sw, metaJsons?.Count ?? 0) )) { // Get all MediaMetaJsons from database using this LINQ query. metaJsons = await context.MediaMetaJsons .Include(j => j.Labels) .ToListAsync(); } var metas = new List <MediaMetadata>(); using (new DisposableLogger( DatabaseLog.DeserializationBegin, (sw) => DatabaseLog.DeserializationEnd(sw, metas?.Count ?? 0) )) { // Deserialize the JSON data in each MediaMetaJson object into a MediaMetadata object and add it to metas. foreach (var metaJson in metaJsons) { var meta = await Task.Run(() => JsonConvert.DeserializeObject <MediaMetadata>(metaJson.Json)); meta.Labels = new ObservableCollection <Label>(metaJson.Labels); metas.Add(meta); } } return(metas); }