git_brcal/src/brecal.model/DbEntity.cs

76 lines
2.1 KiB
C#

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