Taylohtio/GeneralApi/GeneralApi.Core/Entities/PersistentObject.cs

47 lines
1.1 KiB
C#

namespace Taloyhtio.GeneralApi.Core.Entities
{
public abstract class PersistentObject<T>
{
//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<T>;
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)));
}
}
}