namespace Taloyhtio.GeneralApi.Core.Entities { public abstract class PersistentObject { //public const string ID = "Id"; public virtual T Id { get; set; } public virtual bool IsPersistent { get { return isPersistentObject(); } } public override bool Equals(object obj) { if (isPersistentObject()) { // see clr via c# by Jeffrey Richter if (obj == null) { return false; } if (GetType() != obj.GetType()) { return false; } var persistentObject = obj as PersistentObject; return (persistentObject != null) && (this.Id.Equals(persistentObject.Id)); } return base.Equals(obj); } public override int GetHashCode() { return isPersistentObject() ? Id.GetHashCode() : base.GetHashCode(); } private bool isPersistentObject() { return (!Id.Equals(default(T))); } } }