76 lines
2.1 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|