private Task EventAppeared(BaseEvent evt) { switch (evt) { case ProductCreated pc: var product = new Product(); product.Apply(pc); _dataContext.Products.Add(product); break; case ProductNameChanged pnc: _dataContext.Products.FirstOrDefault(e => e.Id == pnc.ProductId)?.Apply(pnc); break; case ProductPriceChanged pcc: _dataContext.Products.FirstOrDefault(e => e.Id == pcc.ProductId)?.Apply(pcc); break; case ProductDeleted pd: _dataContext.Products.RemoveAll(e => e.Id == pd.ProductId); break; case TabCreated tc: var tab = new Tab(); tab.Apply(tc); _dataContext.Tabs.Add(tab); break; case TabNameChanged tnc: _dataContext.Tabs.FirstOrDefault(e => e.Id == tnc.TabId)?.Apply(tnc); break; case TabDeleted td: _dataContext.Tabs.RemoveAll(e => e.Id == td.TabId); break; case ProductOrderedOnTab poot: HandleEvent(poot); break; case TabSettled ts: HandleEvent(ts); break; case OrderDeleted od: HandleEvent(od); break; case SpendingCreated sc: HandleEvent(sc); break; case ProductOrderedOnSpending poos: HandleEvent(poos); break; case OrderOnSpendingDeleted oosd: HandleEvent(oosd); break; case SpendingClosed sc: HandleEvent(sc); break; } return(Task.CompletedTask); }