private PersitedObjectContainer Get(string id) { PersitedObjectContainer result = null; Execute((con) => { result = con.QueryFirstOrDefault <PersitedObjectContainer>($"select * from {_options.TableName} where id = '{id}'"); }); return(result); }
private void Insert(TAggregate aggregateRoot) { var data = _jsonParser.AsJson(aggregateRoot.Snapshot()); var eventEntry = new PersitedObjectContainer(Guid.Parse(aggregateRoot.Identity), data, 1); Execute(con => { using (var tran = con.BeginTransaction()) { con.Execute($"insert into {_options.TableName} (Id,Data,Version) values ('{eventEntry.Id}','{eventEntry.Data}',{eventEntry.Version})", transaction: tran); HandleEventInsert(aggregateRoot, con, tran); tran.Commit(); } }); }
private void Update(TAggregate aggregateRoot) { var entry = Get(aggregateRoot.Identity); if (entry.Version != aggregateRoot.Version()) { throw new Exception("concurency exception"); } var data = _jsonParser.AsJson(aggregateRoot); var updatedEntry = new PersitedObjectContainer(Guid.Parse(aggregateRoot.Identity), data, entry.Version + 1); Execute(con => { con.Execute($"update {_options.TableName} set data='{updatedEntry.Data}',version={updatedEntry.Version}"); }); }
private void Insert(TAggregate aggregateRoot) { var data = _jsonParser.AsJson(aggregateRoot); var eventEntry = new PersitedObjectContainer(Guid.Parse(aggregateRoot.Identity), data, 1); Execute(con => { using (var tran = con.BeginTransaction()) { con.Execute($"insert into {_options.TableName} (Id,Data,Version) values ('{eventEntry.Id}','{eventEntry.Data}',{eventEntry.Version})", transaction: tran); foreach (var evnt in aggregateRoot.UncommittedChanges()) { //insert into events table in same transaction } tran.Commit(); } }); }
private void Update(TAggregate aggregateRoot) { var entry = Get(aggregateRoot.Identity); if (entry.Version != aggregateRoot.Version()) { throw new Exception("concurency exception"); } var data = _jsonParser.AsJson(aggregateRoot.Snapshot()); var updatedEntry = new PersitedObjectContainer(Guid.Parse(aggregateRoot.Identity), data, entry.Version + 1); Execute(con => { using (var tran = con.BeginTransaction()) { con.Execute($"update {_options.TableName} set data='{updatedEntry.Data}',version={updatedEntry.Version}"); HandleEventInsert(aggregateRoot, con, tran); tran.Commit(); } }); }