public async Task <RawItemMetadata> AddItem(RawItemMutation value) { if (value.CategoryId is null) { throw new NullReferenceException("Category can't be null"); } var category = DbContext.Categories.Find(value.CategoryId); var item = new RawItemMetadata { Id = value.Id ?? Guid.NewGuid().ToString(), AccessTime = value.AccessTime ?? DateTimeOffset.Now, ModificationTime = value.ModificationTime ?? DateTimeOffset.Now, CreationTime = value.CreationTime ?? DateTimeOffset.Now, Domain = value.Domain ?? "", Remarks = value.Remarks ?? "", Attachments = value.Attachments ?? "", Category = category, }; if (value.TagIds is not null) { item.Tags = value.TagIds.Select(id => DbContext.Tags.Find(id)).ToList(); } DbContext.Items.Add(item); await DbContext.SaveChangesAsync(); await ReloadItem(item); return(item); }
async Task ReloadItem(RawItemMetadata value) { var entry = DbContext.Entry(value); await entry.ReloadAsync(); await entry.Reference(x => x.Category).LoadAsync(); await entry.Collection(x => x.Tags).LoadAsync(); }