using System.Data; using System.Threading.Tasks; namespace brecal.model { public abstract class DbEntity { /// /// DB primary key /// public uint Id { get; set; } /// /// Creation timestamp, if null record is unsaved /// public DateTime? Created { get; set; } /// /// Modified timestamp, if null record was never modified /// public DateTime? Modified { get; set; } /// /// Set query and cmd parameters for an update query /// /// CMD created by DB manager public abstract void SetUpdate(IDbCommand cmd); /// /// set query and cmd parameters for a create query /// /// CMD created by DB manager public abstract void SetCreate(IDbCommand cmd); /// /// set query and cmd parameters for a delete query /// /// CMD created by DB manager public abstract void SetDelete(IDbCommand cmd); public virtual void SetNonQuery(IDbCommand cmd) { // default: do nothing } /// /// Each database entity must be able to save itself to the database /// public async Task Save(IDBManager manager) { if (this.Created.HasValue) { await manager.ExecuteNonQuery(this.SetUpdate); } else { this.Id = (uint)await manager.ExecuteNonQuery(this.SetCreate); } } /// /// Each entity must be able to delete itself /// public async Task Delete(IDBManager manager) { await manager.ExecuteNonQuery(this.SetDelete); } public async Task ExecuteNonQuery(IDBManager manager) { await manager.ExecuteNonQuery(this.SetNonQuery); } } }